עבור לתוכן

יצירת קובץ טקסט באמצעות יישום ++c והצגת הקובץ

Featured Replies

פורסם

שלום !

ברצוני ליצור באמצעות קוד ++c קובץ טקסט ולקרוא את תוכנו.

להלן הקוד שכתבתי:


//temp.cpp

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
using std::ios;
using std::cerr;

#include <fstream>
using std::ifstream;
using std::ofstream;

int main()
{
   ofstream yosD("yosData.dat",ios::out);
   if(!yosD)
   {
      cerr << "\ncouldn't open file !";
      exit(1);
   }

   int myN;
   char myName[10];
   double mySal;

   cout << "\nEnter number, name and salary\n?";

   while(cin >> myN >> myName >> mySal)
   {
      yosD << myN << myName << mySal << endl;
      cout << "?";
   }

   yosD.close();

   ifstream myD("yosData.dat", ios::in);
   if(!myD)
   {
      cerr << "\nCouldnt open\"yosData.dat\"";
      exit(1);
   }

   cout << "\nShowing \"yosData.dat\":";
   while(myD >> myN >> myName >> mySal)
      cout << myN << myName << mySal << endl;

   cout << "***end of story***";
   return 0;
}

אני מריץ את הקובץ שעבר הידור ומקבל ע"ג המסך:

Enter number, name and salary

?

ומקליד את הנתונים הבאים:

?1 a 1.1

?2 bb 2.22

?3 ccc 3.333ctrl_Z

ctrl_z

קובץ הנתונים שנוצר נראה ע"י עורך טקסטואלי כך:

1a1.1

2bb2.22

3ccc3.333

אך התכנית מציגה את זה:

showing "yosdata":1a1.12

שאלתי:

1. מדוע התו האחרון שהוצג (2) לא הוצג בשורה חדשה ?

2. מדוע לא הוצג כל המידע שבקובץ אלא רק זה עד ה char השני (לא כולל)?

אודה מאוד למי שיעזור לי.

פורסם

לא הרצתי debugger, אבל הנה מה שנראה לי שקורה.

כשאתה מנסה לקרוא עם cin הטקסט נקרא עד איפה שהוא יכול, או עד התו המפריד הראשון (space, newline, tab)

כשאתה קורא מהקובץ עבור ההדפסה, N מקבל 1, myName מקבל a1.1, ו- mySal מקבל 2, ובגלל זה מודפסת לך השורה שקיבלת.

בשורה הבאה כנראה אחד מהמשתנים לא נקרא כמו שצריך ובגלל זה ה- while נכשל.

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

אפשרות אחת - תעבוד עם קבצים בינאריים (בייחוד עם גודל myName הוא קבוע).

אפשרות שניה - תקרא עם scanf.

אפשרות שלישית - כשאתה כותב, תדאג להפריד בין השדות שלך, כדי שתוכל להיעזר בזה כשאתה קורא אותם.

פורסם
  • מחבר

תודה !

ארכיון

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

דיונים חדשים