הפונקציה EOF ב CP כיצד עובדים איתה? - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

הפונקציה EOF ב CP כיצד עובדים איתה?


יוספי

Recommended Posts

שלום

אני יודע שהפונקציה EOF מחזירה TRUE כאשר בוצע ניסיון קריאה כושל ולא כאשר מגיעים לסוף הקובץ

ולכן חשוב לעשות משהו בסיגנון

infile.get(c);
while (!infile.eof()
{
outfile <<c;
infile.get(c);
}

ולא

while (!infile.eof()
{
infile.get(c);
outfile <<c;

}

כי אז התו האחרון מועתק כפול, כיוון שאחרי שהוא קורא את התו האחרון הוא עדיין יכנס בריצה הבאה ללולאה

אבל יש לי דוגמא שהפונקציה EOF לא עובדת כך

אני יוצר קובץ grades.txt

שמכיל את הטקסט 123

קטע הקוד הבא :


ifstream inGrade("grades.txt"); ofstream outRoster("roster.txt");
int tmpGrade; inGrade >> tmpGrade;
while (!inGrade.eof() ) { outRoster << tmpGrade <<endl ; inGrade >> tmpGrade; }

יצור לי את הקובץ roster.txt ריק

אבל אם אעשה

    ifstream inGrade("grades.txt");    ofstream outRoster("roster.txt");
int tmpGrade;

while (!inGrade.eof() ) { inGrade >> tmpGrade; outRoster << tmpGrade <<endl ; }

ייצור לי את הקובץ roster.txt עם הערך 123 ( הפונקציה eof החזירה FALSE כאשר הגעתי לסוף הקובץ ולא אחרי ניסיון קריאה כושל)

מדוע? זה צריך להיות הפוך...

תודה רבה

קישור לתוכן
שתף באתרים אחרים

את התיעוד קראתי..

true if the stream's eofbiterror state flag is set (which signals that the End-of-File has been reached by the last input operation).

false otherwise.

זה אומר שהפונקציה תעבור ל TRUE אחרי שניסיתי לקרוא ולא הצלחתי כי הגעתי לסוף ( או כי הקובץ לא עובד אבל זה לא העניין )

קודם צריך לנסות לקרוא ולא להצליח ואז היא תעבור ל TRUE

כך פעלתי בדוגמא הראשונה והשניה....הראשונה זה עבד השני זה לא עבד

איפה הטעות שלי?

קישור לתוכן
שתף באתרים אחרים

זה נובע מהאופן שבו קוראים לתוך int.

קריאה לתוך int מתבצע באופן הבא: קוראים תו אחר תו מהקלט עד שנתקלים בתו שאינו חלק ממספר (דהיינו לא ספרה). אם הקובץ שלך מכיל רק את התווים 123 (בלי ירידת שורה בסוף) אז מה שיקרה הוא שהתכנית שלך תקרא את הספרות 123, ואז תבוא לקרוא את התו הבאה - ותגיע לסוף הקובץ. אם לדוגמה תוסיף רווח או ירידת שורה בסוף הקובץ אז זה יהיה בסדר.

הדרך לבדוק אם קריאה בודדת לתוך int הצליחה היא ע"י בדיקת הפונקציה fail (בלי קשר ל-eof).

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...