פורסם 2011 בדצמבר 1013 שנים שלום, ניסיתי לעשות פונקציה שסופרת כמה structs יש לי בקובץ... אבל זה לא הצליח הלולאה פשוט אינסופית. הינה הקוד: int count_structs(FILE *fin){ int i=1; struct book b; rewind(fin); while (!feof(fin)) { fseek(fin,sizeof(b),SEEK_CUR); i++;// printf("i= %d\n",i); } return i;} מישהו יכול לעזור לי להבין למה זה לא עובד? תודה רבה לכל מי שיעזור ושבת שלום
פורסם 2011 בדצמבר 1013 שנים fseek מנקה את הEOF לכן תנאי הלולאה תמיד יחזיר true.אם אתה רוצה להגיע מתישהו לסוף הקובץ, אתה צריך לקרוא את התוכן שלו (עם fread).
פורסם 2011 בדצמבר 1013 שנים מחבר קודם כל תודה על התגובה ועל המהירות כבר זה יותר טוב, אבל עדיין יש בעיה - זה רושם מספר שורות לא נכון.. לדוגמא, בקובץ שפתחתי היו 2 שורות והוא רושם לי שיש 4 שורות יש לך מושג איך אפשר לפתור את זה? השינוי: int count_structs(FILE *fin){ int i=1; struct book b; rewind(fin); while (!feof(fin)) { fread(&b,sizeof(b),1,fin); i++; } return i;}
פורסם 2011 בדצמבר 1013 שנים זה כי יש לך שתי בעיות במימוש:קודם כל, אתה מתחיל מ-i=1 במקום i=0. אז מלכתחילה יש לך אחד יותר מדי.בנוסף, כשקוראים קובץ אז מגיעים לסופו רק ברגע שאתה לא מצליח לקרוא עוד יותר. אם לדוגמה הקובץ הוא בגודל 10, אז אתה תגיע ל-feof רק אחרי שתנסה לקרוא את הבית ה-11 בקובץ (ככה שאם לדוגמה ה-struct הוא בגודל 2, אז feof יחזיר אמת רק אחרי הפעם השישית שתנסה לקרוא מהקובץ).חוץ מזה, יש דרך הרבה יותר פשוטה. אתה יכול לעשותfseek(file, 0, SEEK_END);זה מביא את המצביע לקובץ לסוף הקובץ, ואז אפשר להשתמש ב-ftell כדי לדעת מה המיקום המדויק (שהוא כמובן יהיה שווה לגודל הקובץ).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.