1

Тема: Файл, с++

Зроби введення даних і запис в файл без масиву структур.

Як це можна зробити не переробляючи все?



#include <iostream>
#include <fstream>
using namespace std;
struct Student{
string surname;
int mark[4];
};

void SetData (Student *data, int n) {
for (int i = 0; i < n; i++) {
cout << "Student " << i + 1 << ":\n";
cout << "Surname: ";
cin >> data[i].surname;
cout << "Enter 4 marks: ";
for (int j = 0; j < 4; j++)
cin >> data[i].mark[j];
}
}

void to_file(Student *idk,int n){
cout << "Пишем в файл!" << "\n";
ofstream file("txt1");
for(size_t i = 0; i < n; i++)
{ file << idk[i].surname<<"\n";
for (int j = 0; j < 4; ++j) {
file << idk[i].mark[j]<<"\n";
}
}
file.close();
}

bool read_file(Student* idk, int n){
string _surname;
double m1,m2,m3,m4;
cout << "Читаем из файла..." << "\n";
ifstream file("txt1");
if (!file.is_open())

{ cout << "Ошибка чтения файла!\n";
return false;
}

while(file >> _surname >> m1 >> m2 >> m3 >> m4) {
cout << _surname << " " << m1 << " " << m2 << " " << m3 << " " << m4 << " " << "Средний бал
студента: " << (m1 + m2 + m3 + m4) / 4. << "\n";
}
return true;
}

int main() {
ifstream in("txt1");
int count = 0;
int n;
cout << "Введите количество студентов" << endl;
cin >> n;
Student *idk = new Student[n];

SetData(idk,n);
to_file(idk,n);
read_file(idk,n);

}

2 Востаннє редагувалося koala (03.03.2021 14:51:45)

Re: Файл, с++

"Все" - це, вибачте, 40 рядків. Жах, 40 рядків переробити!
Відступи розставте, ваш код читати неможливо. І текст перекладіть, ви ж не в російському ЗВО навчаєтеся.

Що ж до питання - переробіть функції на роботу з однією структурою, а не з масивом, і викликайте їх у циклі в main.

Щоб дописувати в файл замість перезаписувати - або не закривайте його (передавайте посиланням у функцію, наприклад), або використовуйте при відкритті другий параметр ios::app (від append, додати).

ofstream file("txt1",ios::app);
Подякували: grecigor11, leofun012