עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

פוקציית 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:

ארכיון

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

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.