עבור לתוכן

פוקציית count structs בקובץ

Featured Replies

פורסם

שלום,

ניסיתי לעשות פונקציה שסופרת כמה 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;
}

מישהו יכול לעזור לי להבין למה זה לא עובד?

תודה רבה לכל מי שיעזור ושבת שלום :)

פורסם

fseek מנקה את הEOF לכן תנאי הלולאה תמיד יחזיר true.

אם אתה רוצה להגיע מתישהו לסוף הקובץ, אתה צריך לקרוא את התוכן שלו (עם fread).

פורסם
  • מחבר

קודם כל תודה על התגובה ועל המהירות :)

כבר זה יותר טוב, אבל עדיין יש בעיה - זה רושם מספר שורות לא נכון..

לדוגמא, בקובץ שפתחתי היו 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;
}

פורסם

זה כי יש לך שתי בעיות במימוש:

קודם כל, אתה מתחיל מ-i=1 במקום i=0. אז מלכתחילה יש לך אחד יותר מדי.

בנוסף, כשקוראים קובץ אז מגיעים לסופו רק ברגע שאתה לא מצליח לקרוא עוד יותר. אם לדוגמה הקובץ הוא בגודל 10, אז אתה תגיע ל-feof רק אחרי שתנסה לקרוא את הבית ה-11 בקובץ (ככה שאם לדוגמה ה-struct הוא בגודל 2, אז feof יחזיר אמת רק אחרי הפעם השישית שתנסה לקרוא מהקובץ).

חוץ מזה, יש דרך הרבה יותר פשוטה. אתה יכול לעשות

fseek(file, 0, SEEK_END);

זה מביא את המצביע לקובץ לסוף הקובץ, ואז אפשר להשתמש ב-ftell כדי לדעת מה המיקום המדויק (שהוא כמובן יהיה שווה לגודל הקובץ).

פורסם
  • מחבר

תודה רבה!!! :)

שוב הצלת אותי :yelclap:

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים