0

Имеется класс student, данные, которого нужно записать в текстовый файл. Во время компиляции программы происходит бесконечная запись в файл, которая не прерывается. При этом записывается только один класс(name, age, kurs в единственном числе),хотя по условию задания количество "студентов" вводится с клавиатуры. Как следует исправить данные ошибки?

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

class student{ private: string name; int age; int kurs;

public:
student(string name, int age, int kurs) {
    this-&gt;name = name;
    this-&gt;age = age;
    this-&gt;kurs = kurs;
}
~student(){};

double get_age(){
    return age;
}

int get_kurs(){
    return kurs;
}

void print()
{
    cout &lt;&lt; &quot;Name: &quot; &lt;&lt; name &lt;&lt; endl;
    cout &lt;&lt; &quot;age: &quot; &lt;&lt; age &lt;&lt; endl;
    cout &lt;&lt; &quot;kurs: &quot; &lt;&lt; kurs &lt;&lt; endl &lt;&lt; endl;
}

void key()
{
    cin.ignore(INT_MAX, '\n');

    cout &lt;&lt; &quot;Enter name: &quot;;
    cin &gt;&gt; name;
    cout &lt;&lt; &quot;Age: &quot;;
    cin &gt;&gt; age;
    cout &lt;&lt; &quot;Enter course: &quot;;
    cin &gt;&gt; kurs;
    cout &lt;&lt; endl;
}


};

int main() { string namest; int agest; int kursst; int number;

cout &lt;&lt; &quot;Enter the number of student: &quot;;
cin &gt;&gt; number;

student stud(namest, agest, kursst);

ofstream file(&quot;file.txt&quot;,ios::out);
if (!file.is_open()){
    cout&lt;&lt;&quot;ошибка в открытии файла&quot;&lt;&lt;endl;
}
else{
    cout&lt;&lt;&quot;файл открыт&quot;&lt;&lt;endl;
    for (int i=0;i&lt;number;i++){
        stud.key();
        file.write((char*)&amp;stud,sizeof(stud));
    }
}
file.close();

ifstream infile(&quot;file.txt&quot;,ios::in);
    cout &lt;&lt; &quot;файл открыт&quot; &lt;&lt; endl;
    while (!infile.eof()) {
        if (stud.get_kurs() == course) {
            all_age += stud.get_age();
            counter++;
        }
    }
    cout &lt;&lt; &quot;Average age is about: &quot; &lt;&lt; all_age / counter &lt;&lt; endl;
file.close();


return 0;

}

zey_a
  • 3
  • Кроме сохранения не-POD данных в файл (из-за чего вопрос помечен как дубль) есть еще один момент, но в данном случае он совсем мелкий... while (!infile.eof()) — так нельзя, см. https://ru.stackoverflow.com/q/833980/195342 – Harry Sep 24 '21 at 04:16

1 Answers1

0

А вы точно понимаете что вы пытаетесь записать в файл? Какие данные будут по адресу

(char*)&stud

И не следует ли вам перегружать преобразование типов

operator char* (){/* ...  */}

или уже писать в файл отдельно get_age(),get_kurs()?

И по второй части main: где вы хоть что-то пытаетесь из открытого файла прочитать? (и главное зачем)

  • ошибка состояла в том, что я пыталась записать целый объект, как в бинарном файле – zey_a Sep 24 '21 at 06:42