נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: C++ - קבצים בינארים

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
שני
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 11 December 2007 בשעה 10:24 | IP רשוּם
ציטוט שני

אני כבר מיואשת, יש לי 7 טעויות שאני לא מבינה למה הן טעויות... אני מאוד מאוד מאוד אשמח אם מישהו יוכל להגיד לי במה טעיתי.

כתבתי תכנית שמקבלת 5 נקודות (x,y) מהמשתמש ומכניסה אותן לקובץ.לאחר מכן התכנית הופכת את מיקומי הנקודות בקובץ (הנק' הראשונה הופכת לאחרונה, הנק' השניה מתחלפת עם הנקודה האחת לפני האחרונה וכו').

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

#include <iostream.h>
#include <fstream.h>
#include <math.h>

void main()
{
 // Const definition
 const char FILE[] = "targil.txt";
 const int  NUM_OF_POINTS = 5;
 
 // Files definition
 fstream fsFile;

 // struct definition
 struct Point
 {
  int x;
  int y;
 };

 // Variable definition
 Point pInput;
 Point pOutputOne;
 Point pOutputTwo;
 Point pPrintPoint;

 // Code section

 fsFile.open(FILE, ios::in | ios::out | ios::binary);
 if (!fsFile.is_open())
 {
  cout << "The file didn't open" << endl;
 }

 // Input from the user:
 cout << "Enter " << NUM_OF_POINTS <<" points" << endl;
 for (int nPointIndex = 0; nPointIndex < NUM_OF_POINTS; ++nPointIndex)
 {
  cin >> pInput.x >> pInput.y;
 }

 // Switching between the points:
 seekg (0, ios::beg); 
 for( int nPointsIndex = 0; nPointsIndex <0 NUM_OF_POINTS; ++nPointsIndex)
 {
  seekg(sizeof(Point) * nPointsIndex, ios::beg);
  fsFile.read((char*) &pOutputOne, sizeof(Point));

        seekg(sizeof(Point) * NUM_OF_POINTS - nPointsIndex - 1, ios::beg);
     fsFile.read((char*) &pOutputTwo, sizeof(Point));
 
       seekg(sizeof(Point) * nPointsIndex, ios::beg);
    fsFile.write((char*) &pOutputTwo, sizeof(Point));

    seekg(sizeof(Point) * NUM_OF_POINTS - nPointsIndex - 1, ios::beg);
    fsFile.write((char*) &pOutputOne, sizeof(Point));
 }
 
    seekp(0, ios::beg);
 for (int nIndexOutput = 0; nIndexOutput < NUM_OF_POINTS; ++nIndexOutput);
 {
  fsFile.read((char*) &pPrintPoint, sizeof(Point));

  cout << pPrintPoint.x << pPrintPoint.y << endl;
 }
}

חזרה לתחילת העמוד הצג את כרטיס החבר של שני חפש הודעות אחרות של שני בקר בדף הבית של שני
 
צחי@
משתמש חבר
משתמש חבר


הצטרף / הצטרפה: 02 January 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 209
נשלח בתאריך: 11 December 2007 בשעה 11:09 | IP רשוּם
ציטוט צחי@

אלה השגיאות שהופיעו לי:

קוד:

d:\projects\test\main.cpp(43) : error C2065: 'seekg' : undeclared identifier
d:\projects\test\main.cpp(44) : error C2146: syntax error : missing ';' before identifier 'NUM_OF_POINTS'
d:\projects\test\main.cpp(44) : error C2143: syntax error : missing ')' before '++'
d:\projects\test\main.cpp(44) : error C2059: syntax error : ';'
d:\projects\test\main.cpp(44) : error C2059: syntax error : ')'
d:\projects\test\main.cpp(45) : error C2143: syntax error : missing ';' before '{'
d:\projects\test\main.cpp(59) : error C2065: 'seekp' : undeclared identifier

הרוב הן פשוט שגיאות תחביר - תראי שמופיע תמיד מס' השורה - שבה קרתה שגיאת הקומפילציה. יש איזהשהו תו מיותר או שחסר תו.

 לגבי seekg ו-seekp הם לא פונק' שעומדות בפני עצמן אלא שייכות למחלקות ostream ו-istream - תחשבי על הצורה שאת מנסה להשתמש בהם - על איזה stream את מצפה שהם יעבדו ?

חזרה לתחילת העמוד הצג את כרטיס החבר של צחי@ חפש הודעות אחרות של צחי@ בקר בדף הבית של צחי@
 
שני
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 11 December 2007 בשעה 21:12 | IP רשוּם
ציטוט שני

מצאתי את הטעות.. טעות די טיפשית, פשוט שכחתי לכתוב את השם של הקובץ לפני seekp\g .

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

הבלטתי בסוף הקוד את החלק הבעייתי :  

 

#include <ostream.h>
#include <fstream.h>
#include <math.h>

void main()
{
 // Const definition
 const char FILE[] = "targil.txt";
 const int  NUM_OF_POINTS = 5;
 
 // Files definition
 fstream fsFile;

 // struct definition
 struct Point
 {
  int x;
  int y;
 };

 // Variable definition
 Point pInput;
 Point pOutputOne;
 Point pOutputTwo;
 Point pPrintPoint;

 // Code section

 fsFile.open(FILE, ios::in | ios::out | ios::binary);
 if (!fsFile.is_open())
 {
  cout << "The file didn't open" << endl;
 }

 // Input from the user:
 cout << "Enter " << NUM_OF_POINTS <<" points" << endl;
 for (int nPointIndex = 0; nPointIndex < NUM_OF_POINTS; ++nPointIndex)
 {
  cin >> pInput.x >> pInput.y;
  fsFile << pInput.x << pInput.y << endl;
 }

 // Switching between the points:
 fsFile.seekg(0, ios::beg);
 for (int nPointsIndex = 0; nPointsIndex < NUM_OF_POINTS; ++nPointsIndex)
 {
  fsFile.seekg(sizeof(Point) * nPointsIndex, ios::beg);
  fsFile.read((char*) &pOutputOne, sizeof(Point));

        fsFile.seekg(sizeof(Point) * NUM_OF_POINTS - nPointsIndex - 1, ios::beg);
     fsFile.read((char*) &pOutputTwo, sizeof(Point));
 
       fsFile.seekg(sizeof(Point) * nPointsIndex, ios::beg);
    fsFile.write((char*) &pOutputTwo, sizeof(Point));

    fsFile.seekg(sizeof(Point) * NUM_OF_POINTS - nPointsIndex - 1, ios::beg);
    fsFile.write((char*) &pOutputOne, sizeof(Point));
 }
 
    fsFile.seekg(0, ios::beg);
 for (int nIndexOutput = 0; nIndexOutput < NUM_OF_POINTS; ++nIndexOutput);
 {
  fsFile.read((char*) &pPrintPoint, sizeof(Point));
  cout << pPrintPoint.x << " , " << pPrintPoint.y << endl;
 }
}

 

חזרה לתחילת העמוד הצג את כרטיס החבר של שני חפש הודעות אחרות של שני בקר בדף הבית של שני
 
צחי@
משתמש חבר
משתמש חבר


הצטרף / הצטרפה: 02 January 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 209
נשלח בתאריך: 11 December 2007 בשעה 23:04 | IP רשוּם
ציטוט צחי@

כן:
קוד:

 for (int nIndexOutput = 0; nIndexOutput < NUM_OF_POINTS; ++nIndexOutput);


ה-; בסוף השורה הנ"ל לא צריך להיות שם. יש קומפייילרים שנותנים על כזה דבר אזהרה.
חזרה לתחילת העמוד הצג את כרטיס החבר של צחי@ חפש הודעות אחרות של צחי@ בקר בדף הבית של צחי@
 
צחי@
משתמש חבר
משתמש חבר


הצטרף / הצטרפה: 02 January 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 209
נשלח בתאריך: 11 December 2007 בשעה 23:08 | IP רשוּם
ציטוט צחי@

שני כתב:

מצאתי את הטעות.. טעות די טיפשית, פשוט שכחתי לכתוב את השם של הקובץ לפני seekp\g

איך זה שונה ממה שאני כתבתי בתגובה ?

אגב, את לא מתכוונת לשם של הקובץ, אלא לשם של ה-instance של המחלקות ifstream או ofstream שמייצג את ה-stream לקריאה/כתיבה לקובץ.

חזרה לתחילת העמוד הצג את כרטיס החבר של צחי@ חפש הודעות אחרות של צחי@ בקר בדף הבית של צחי@
 
שני
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 13 December 2007 בשעה 12:38 | IP רשוּם
ציטוט שני

זה לא שונה P: עכשיו הבנתי למה התכוונת כשכתבת שהן לא עומדות בפני עצמן.

וואי תודה רבה!

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 13 December 2007 בשעה 12:49 | IP רשוּם
ציטוט שני

טוב עכשיו התכנית רצה אבל התשובות לא יוצאות נכונות =\ :

Enter 5 points
1 2 3 4 5 6 7 8 9 0
-858993460 , -858993460
-858993460 , -858993460
-858993460 , -858993460
-858993460 , -858993460
-858993460 , -858993460
Press any key to continue

חזרה לתחילת העמוד הצג את כרטיס החבר של שני חפש הודעות אחרות של שני בקר בדף הבית של שני
 
צחי@
משתמש חבר
משתמש חבר


הצטרף / הצטרפה: 02 January 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 209
נשלח בתאריך: 13 December 2007 בשעה 14:03 | IP רשוּם
ציטוט צחי@

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

חזרה לתחילת העמוד הצג את כרטיס החבר של צחי@ חפש הודעות אחרות של צחי@ בקר בדף הבית של צחי@
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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