2013-12-19 3 views
-1

код выглядит следующим образом:Ошибка при обработке файлов с использованием классов?

class student 

    { 

     char name[20]; 
     int roll; 
     float marks; 

    public: 

    void getdata(void) 

    { 

     char ch; 
     cin.get(ch); 

     cout << "Name : "; 
     cin.getline(name, 20); 

     cout << "\nRoll no : "; 
     cin >> roll; 

     cout << "\nMarks : "; 
     cin >> marks; 
     cout << "\n"; 

    } 

    void display(void) 

    { 
     cout << "\n" << name << " ,roll no " << roll << " has " << marks 

     << "% marks.\n"; 

    } 

    int getroll() 

    { return roll; } 

}; 

void main() 

{ 

    clrscr(); 

    student s1; 
    fstream fil; 
    int rn; 
    char ans = 'y'; 

    fil.open("stu.dat", ios::out); 

    while (ans == 'y') 

    { 

     s1.getdata(); 

     fil.write((char *)&s1, sizeof(s1)); 

     cout << "\n Do you want to enter more records :?"; 

     cin >> ans; 

     } 

    fil.close(); 

    fil.open("stu.dat", ios::in); 

     fil.seekg(0); 

     while (fil) 

     { 

      fil.read((char *)&s1, sizeof(s1)); 

      s1.display(); 

     } 

     fil.close(); 

    getch(); 

} 

Программа собирается читать и писать подробности студента, используя классы.

ошибка

Выходной сигнал показывает детали дважды, если я ввести данные один раз.

выход найден

Нитина, rollno 12 имеет 98% знаков. nitin, rollno 12 имеет отметки в 98%.

результат, ожидаемый

Нитина, rollno 12 имеет 98% знаков.

+2

Способность подготовить [минимальный полный пример] (http://sscce.org) очень полезный навык. – Beta

+0

Отступ, пожалуйста. – Shoe

+0

Сделано редактирование. Коррекция любой ??? – Rahul12

ответ

0

Попробуйте это:

class student 

    { 

     char name[20]; 
     int roll; 
     float marks; 

    public: 

    void getdata(void) 

    { 

     char ch; 
     cin.get(ch); 

     cout << "Name : "; 
     cin.getline(name, 20); 

     cout << "\nRoll no : "; 
     cin >> roll; 

     cout << "\nMarks : "; 
     cin >> marks; 
     cout << "\n"; 

    } 

    void display(void) 

    { 
     cout << "\n" << name << " ,roll no " << roll << " has " << marks 

     << "% marks.\n"; 

    } 

    int getroll() 

    { return roll; } 

}; 

void main() 

{ 

    clrscr(); 

    student s1; 
    fstream fil; 
    int rn; 
    char ans = 'y'; 

    fil.open("stu.dat", ios::out); 

    while (ans == 'y') 

    { 

     s1.getdata(); 

     fil.write((char *)&s1, sizeof(s1)); 

     cout << "\n Do you want to enter more records :?"; 

     cin >> ans; 

     } 

    fil.close(); 

    fil.open("stu.dat", ios::in); 

     fil.seekg(0); 

     while (fil) 

     { 

      fil.read((char *)&s1, sizeof(s1)); 

      if (feof(fil)) { 
       puts ("End-of-File reached."); 
       break; 
      } 

      s1.display(); 

     } 

     fil.close(); 

    getch(); 

} 
+0

Да, это сработало. Спасибо. – Rahul12

Смежные вопросы