c5123 פורסם 2011 באפריל 16 Share פורסם 2011 באפריל 16 התוכנה צריך להדפיס 10 שורות מקובץואז לשאול אם אני רוצה להמשיך ל עוד 10הבעיה שבפעם השניה זה מדפיס 10 שורות אבל זה מדלג על הרבה שורות line 1--line 10whould you like to see the next 10 lines (y/n)yline 40 --line 50should keep going from line 11 but this notיש למשהוא רעיון למה זה קופץ ?program in txt file [attachment deleted by admin] קישור לתוכן שתף באתרים אחרים More sharing options...
elrxx פורסם 2011 באפריל 16 Share פורסם 2011 באפריל 16 הבעיה בפקודת flushallתשנה ל fflush(stdin) והתכנית שלך כתובה בסגנון ממש לא טוב קישור לתוכן שתף באתרים אחרים More sharing options...
c5123 פורסם 2011 באפריל 16 מחבר Share פורסם 2011 באפריל 16 תודה זה פעל היה לנו שעור אחד על קבצים וקיבלנו עבודה לפסח אז אז אין לי ניסיון אם קבצים "והתכנית שלך כתובה בסגנון ממש לא טוב" ביקורת אם קצת יותר פרטים תתקבל בברכה ורציתי שהלולאה החיצונית תרוץ עד סוף הקובץ EOF אבל אני לא כל כך בוטח אך לכתוב את התנאי הזה ניסיתי while(asaf1!=EOF)1 asaf1 is the file pointer זה לא פעל קישור לתוכן שתף באתרים אחרים More sharing options...
elrxx פורסם 2011 באפריל 16 Share פורסם 2011 באפריל 16 תוסיף רווחים לתוכניתאם אתה רוצה לולאה אינסופית יותר יפה לרשום משהו כמוwhile(true)או for(;במקום מה שרשמת,תשים לב שהיו הזחות בתוכניתאל תרשום מספרים בצורה מפורשת אלא על ידי קבועיםאם אתה רוצה לרשום גודל של מערך תשתמש ב sizeofאם תקרא תיעוד תראה ש fgets מחזיר NULL שמגיעים לסוף הקובץ קישור לתוכן שתף באתרים אחרים More sharing options...
c5123 פורסם 2011 באפריל 16 מחבר Share פורסם 2011 באפריל 16 קבועים you mean define sizeof ? "אם תקרא תיעוד תראה ש fgets מחזיר NULL שמגיעים לסוף הקובץ" נכון אבל זה לא מקדם את המצביע ? אני חושב שכן וזה יגרום לבעיה אני ישנה את זה ל while(true) for now מוריד לי את המשתנה j שוב תודה קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2011 באפריל 16 Share פורסם 2011 באפריל 16 מה הבעיה שזה יקדם את המצביע? כל קריאה גם ככה מקדמת את המצביע.שים לב ש-fgets תחזיר null רק ברגע שהיא מנסה לקרוא מהקובץ, אבל היא כבר בסופו. כלומר, נניח שיש בקובץ 110 תווים, וכל פעם אתה קורה 100 תווים. בקריאה הראשונה יקראו 100 תווים. בקריאה השנייה יקראו 10 התווים הנותרים (הפונקציה עדיין לא תחזיר null). רק בקריאה השלישית הפונקציה תחזיר null.סתם לדוגמה, ככה צריך להראות קוד כזה בערך:while (true) { if (fgetc(...) == null) /* Reached end of file */ break; } /* do other stuff with the input */}כמו שנאמר - עדיף להשתמש בקבועים (כלומר define) מאשר "מספרי קסם". כמובן תגדיר קבועים לדברים הגיוניים (אין צורך להגדיר קבוע עבור 0 לדוגמה...)לא ממש צריך להשתמש ב-sizeof. אם הגדרת קבוע המייצג את גודל המערך אז תשתמש בקבוע הזה בשביל לדעת את גודל המערך, לא ב-sizeof. למעשה, השימוש היחיד ב-sizeof (לדעתי) הוא ב-malloc.וכמובן, הכי חשוב - הזחה נכונה. כל בלוק (קטע קוד המוקף ב-{}) צריך להיות מוזח ביחס לבלוק שמכיל אותו.נ.ב. מה זה "rt" בפונקציה fopen? קישור לתוכן שתף באתרים אחרים More sharing options...
c5123 פורסם 2011 באפריל 16 מחבר Share פורסם 2011 באפריל 16 "מה הבעיה שזה יקדם את המצביע? כל קריאה גם ככה מקדמת את המצביע" אך שהתוכנית כתובה עכשיו זה לא יעבוד אבל שאני חושב על זה עכשיו אני יכול לעשות את זה אם לולאה אחת ואז זה כן יעבוד מממ אני ישנה את זה מחר בקשר ל "rt" (הסבר מאתר אחר ) בעבר (ועד היום ב-Windows), לפונקציה fopen היו 2 מצבים: "מצב טקסט" ו"מצב בינארי". במצב בינארי, שהוא ברירת מחדל (כלומר לא מוסיפים כלום ל-r ו-w או מוסיפים b) כל פונקציות הקריאה והכתיבה מתייחסות לנתונים AS IS, כלומר לא מנסות לפרש את הבייתים בתוך הקובץ. במצב טקסט, מתבצע פרוש מסוים לסוף שורה. n\ בודד הופך ל-n\r\ בכתיבה ולההפך קורא בקריאה. כמו כן, יש התייחסות ל-Ctrl + Z כסוף קובץ (לפחות כך לפי תיעוד של MS) קישור לתוכן שתף באתרים אחרים More sharing options...
c5123 פורסם 2011 באפריל 16 מחבר Share פורסם 2011 באפריל 16 new and improved in the file [attachment deleted by admin] קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2011 באפריל 16 Share פורסם 2011 באפריל 16 אחלה (למרות שעדיין יש לך טעויות עם ההזחה). קישור לתוכן שתף באתרים אחרים More sharing options...
c5123 פורסם 2011 באפריל 17 מחבר Share פורסם 2011 באפריל 17 :s07: :s07: :s07: :s07: עוד שאלה על fread זה מחזיר לי 0 fread לא פעול ואני לא מבין למה התוכנה אמורה לשלוח 2 מספרים מקובץ לזיכרון תוכנית בקובץ ניסיתי כל כך הרבה דברים וזה לא עובד help [attachment deleted by admin] קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2011 באפריל 17 Share פורסם 2011 באפריל 17 למה אתה פותח את הקובץ פעמיים במקביל? קודם כל פתח אותו לכתיבה, תעשה את כל החלק שכותב לתוכו, סגור אותו, ורק אז פתח אותו לקריאה וקרא ממנו.חוץ מזה, אתה קורא מהקובץ וכותב אליו בצורות שונות לחלוטין. או שתשתמש ב-fprintf ו-fscanf, או שתשתמש ב-fwrite ו-fread. אל תערבב.עוד טיפ קטן: אם למערך שלך גודל קבוע וידוע מראש, הוא קטן יחסית, ואתה לא צריך להוציא אותו מחוץ לscope של הפונקציה, אין צורך להקצות אותו דינמית. את ptr אתה יכול להגדיר ככה והקוד עדיין יעבוד:int ptr[size];חוץ מזה, נהוג לסמן קבועים באותיות גדולות בלבד (SIZE במקום size). קישור לתוכן שתף באתרים אחרים More sharing options...
c5123 פורסם 2011 באפריל 17 מחבר Share פורסם 2011 באפריל 17 :jump: :jump: :jump: :jump: :jump: כן זה פתר את הבעיה בשניה אוף אך את זה לא ניסיתי שוב תודה מקווה שזאת הפעם האחרונה יש לי רק עוד 4 תרגילים קישור לתוכן שתף באתרים אחרים More sharing options...
Ghosthunter פורסם 2011 באפריל 17 Share פורסם 2011 באפריל 17 אתה מערבב בין fprintf ו- fread. הראשון מיועד לקבצי טקסט, והשני מיועד לקבצים בינאריים.אתה צריך להחליט על פורמט הקובץ שאתה רוצה שישמר, ולהשתמש בפונקציות המתאימות (יש לך גם fscanf ו- fwrite בהתאמה).ותרשום את הקוד שלך בתג "קוד", ולא בקובץ, בשביל זה הוא מיועד.אוי... מוזר.. לא ראיתי את עמוד 2. קישור לתוכן שתף באתרים אחרים More sharing options...
c5123 פורסם 2011 באפריל 18 מחבר Share פורסם 2011 באפריל 18 מממ עוד פעם צריך עזרה sorry תרגיל: "כתוב תוכנית לטיפול בספר טלפונים כך שהנתונים ייקראו ויישמרו לקובץ. כתוב פונקציה שמעדכנת נתון של רשומה ספציפית ע"י גישה ישירה לקובץ, לרשומה הספציפית. השתמש בפונקציות fseek,fread,fwrite" שמעדכנת נתון של רשומה ספציפית ע"י גישה ישירה לקובץ? גישה ישירה לקובץ....? טוב אז אני לא ממש בטוח אך fseek עובד, אך שהבנתי אתה נותן לו מיקום וזה ישנה את ה file pointer למקום החדש אם אפשרות להתחיל מהסוף או התחלה הבעיה :יש לי מיבנה של 3 מחרוזות שם פרטי. שם משפחה. וטלפון בתוכנית אני רץ על מערך של מיבנים ושומר אותם על הקובץ fseek רץ על הנתונים בקובץ לא המצביע אז בו נגיד שאני ישלח אותו ל 3 זה יתן לי את המספר טלפון של השם הראשון? טוב אני דיי בטוח שלא הבנתי עוד הסוף אך fseek פועל אז אם משהוא יכל להסביר אם דוגמא קטנה עוד שאלה אני עשה malloc למצביע של struct הבעיה היא שאני לא יכל לדעת כמה מיבנים יש בקובץ ? בתוכנית אחרת פשוט שמרתי את מספר המבנים על קובץ ניפרד אבל אני דיי בטוח שיש דרך יותר טובה לעשות את זה ? תודה מראש וחג שמח. קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2011 באפריל 18 Share פורסם 2011 באפריל 18 fseek זו אכן פונקציה שמקבלת מספר ומצביע לקובץ, ומזיזה את המצביע בהתאם למספר הזה (תיקון קטן - אפשר ביחס להתחלה, ביחס לסוף, או ביחס למיקום הנוכחי). המקום של המצביע בקובץ נמדד בבתים (bytes). הפונקציה לא יודעת מה המידע שיש בתוך הקובץ ומה הגודל שלו.אם תקפוץ למקום 3 בקובץ, אז כנראה תנחת באמצע המחרוזת של השם הפרטי של המבנה הראשון. השאלה הכי חשובה היא איך בדיוק נראה המבנה שלך. האם המחרוזות מוחזקות ע"י מצביעים שמוקצים דינמית, או ע"י מערכים בגודל קבוע? במקרה הראשון זה קצת בעייתי (אתה צריך מידע נוסף לגבי גודל המחרוזות), אבל במקרה השני אתה יכול פשוט לחשב בדיוק מה המיקום בקובץ של כל מחרוזת שאתה רוצה לקרוא / לכתוב.אתה יכול לדעת כמה מבנים יש בתוך הקובץ פשוט לפי הגודל שלו. נניח שהגודל של ה-struct שלך הוא 30 בתים והקובץ הוא בגודל 150 בתים, אז יש לך 5 מבנים בקובץ. כמובן זה בהנחה שאת הקובץ יצרו בדיוק באופן כזה (כלומר רשמו לתוכו את 5 המבנים אחד אחרי השני, ואין בו שום מידע מסוג אחר).בשביל לדעת מה גודל הקובץ אפשר לעשות fseek לסוף הקובץ, ואז ftell כדי לדעת את המיקום של המצביע (יש כאן בדיוק דוגמה שמראה איך עושים את זה). קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.