בעיה עם getline בC++

aaronc76

New member
בעיה עם getline בC++

שלום ! אני קורא מקובץ file.txt בעזרת getline. file.getline(buffer,22); str=buffer; int = atoi(buffer); כל זה בתוך לולאה. הכל טוב ויפה אך משום מה באמצע הקובץ נכנס לי לתוך buffer NULL למישהו יש רעיון למה זה ? הקובץ מורכב כך integer string flotat code number,product name, price.
 

Zack DA

New member
נסה לחשוב במה השורה ב"אמצע הקובץ"

שונה משאר השורות.... בהצלחה !
 

aaronc76

New member
גאון !

ובכל זאת, למישהו יש רעיון ? גיליתי שנכנס לי EOF לBUFFER באמצע הקובץ. רעיונות ????
 

DadleFish

New member
קיבלת רעיון. אולי תנסה לעבוד איתו?

קודם כל, תגלה מהי השורה הבעייתית. אתה יכול למשל לכתוב למסך כל שורה שקיבלת, ואז תראה איפה הקריאה נעצרת. כשתדע מה השורה הבעייתית, תוכל לבדוק רק אותה בנפרד מכל השאר. כנראה שבאמת יש לך בעיה בשורה הזו.
 

aaronc76

New member
ניסיתי

תאמינו לי שאני עובד כבר יומיים על השורה הזו. למראית עין אין שום הבדל בין השורה הזו לשאר השורות. הדפסתי למסך והוא מדפיס לי שורה ריקה - EOF. אני לא מבין איך נכנס לי לאמצע קובץ EOF.
 

DadleFish

New member
יש לך קצת בלבול במושגים

EOF אי אפשר להדפיס. בכל מקרה, תריץ מ-DOS את type filename ותראה אם הוא מדפיס לך את כל הקובץ עד סופו, ייתכן שהשורה הנ"ל מכילה תו שאתה לא רואה. אם זה לא עוזר, תעלה את הקוד ואת הקובץ ונראה.
 

aaronc76

New member
בלבול ?

לא נראה לי... פשוט נתתי תנאי שאם יש לי בBUFFER את התו EOF שהוא בלתי נראה על המסך אז שיעשה משהו. וזה קורה לי באמצע הקובץ. בכל מקרה לעת עתה שיניתי את הגישה בתוכנית וזה פתר לי את הבעה. אבל עדיין זה מוזר מאוד מה שקורה שם !!
 

vinney

Well-known member
מה זה EOF?

באמצע הקובץ אין EOF, יש רק בסוף, זה ההגדרה של המושג. מה יש לך באמצע הקובץ, שאתה חושב שזה EOF?
 

aaronc76

New member
זה רק אתה...

לכל תו גם הוא בלתי נראה וגם אם הוא צליל או וואט אוור יש ערך כלשהו. ניתן לגלותו לפי ASCII או UNI CODE או פונקציות כאלה ואחרות...
 

DadleFish

New member
גם לך יש בלבול במושגים.

מה זה "מחרוזת"? איך אתה קורא? קובץ בינארי אינו שונה מקובץ טקסט, פשוט בקריאת קובץ טקסט מתייחסים לתווים מסוימים בצורה שונה.
 
מחרוזת = char*

ואני קורא עם fread... אז מה שאתה אומר זה שאם אני אקרא קובץ בינארי לתוך char* הוא יכול לקרוא אותו לא נכון?
 

vinney

Well-known member
מה זה נכון?

הוא יקרא לך לשם את מה שיש בקובץ. אותו תו בקובץ יכול לייצג עברית או סינית מדוברת, תלוי במיפוי ASCII.
 
רגע.....

אז כשאני קורא קובץ בינארי ל char* וכותב אותו שוב לקובץ אחר, הוא מפקשש בגלל כל ה 0\ שגורמים לו לקצץ את המחרוזות כשלא צריך?
 

vinney

Well-known member
תלוי איך אתה קורא ואיך אתה כותב

0\ זה בה"כ תו, חוקי לחלוטין בכל קובץ בינארי. אם אתה מתייחס לקובץ בינארי כטקסט - ברור שהוא יעשה לך צרות. עם FREAD וFWRITE אין ל0\ שום השפעה. אם אתה קורא עם FREAD וכותב עם FPRINTF אז דמך בראשך.
 
אבל אם הכנסתי אותו ל CHAR*

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