Много вариантов есть, например завести одну функцию, которая будет заполнять массив данными из файла, вторую функцию, которая будет эти данные обрабатывать, и третью функцию, которая будет эти данные выводить.
C++ |
1
2
3
4
5
6
| void ReadData(ifstream& stream, student& st); // чтение из файла 1 записи
int Analyze(const student& st); // анализ успеваемости и возврат значения (l - у вас в коде)
void WriteData(ofstream& stream, const student& st); // внести одну запись в файл
// --- следующий код ниже перед записью
if (Analyze(st[i]))
WriteData(L, st[i]); |
|
При подходе выше чтение необходимо обернуть в цикл, чтобы сразу всё прочитать:
Кликните здесь для просмотра всего текста
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
| #include <iostream>
#include <fstream>
using namespace std;
struct student { // структура "студент"
int curs, gruppa, uspev[10][5];
char fam[20], name[20], otc[20];
};
void ReadData(ifstream& stream, student& st) { // чтение из файла 1 записи
if (!stream) // если что-то не так
return;
stream >> st.fam;
stream >> st.name;
stream >> st.otc;
stream >> st.curs;
stream >> st.gruppa;
for (int i = 0; i < st.curs * 2; i++)
for (int j = 0; j < 5; j++)
stream >> st.uspev[i][j];
}
int Analyze(const student& st) { // анализ успеваемости и возврат значения (l - у вас в коде)
for (int i = 0; i < st.curs * 2; i++)
for (int j = 0; j < 5; j++)
if (st.uspev[i][j] == 2)
return 0;
return 1;
}
void WriteData(ofstream& stream, const student& st) { // внести одну запись в файл
stream << st.fam << " " << st.name << " " << st.otc << " " << st.curs << " " <<
st.gruppa << " ";
for (int i = 0; i < st.curs * 2; i++)
for (int j = 0; j < 5; j++)
stream << st.uspev[i][j] << " ";
}
int main() {
student *st; // указатель на объект структуры "студент"
// открытие файлов на чтение и запись
ifstream F;
F.open("Student.txt");
ofstream L;
L.open("NewFile.txt");
int n; // временная переменная для хранения количества студентов
F >> n; // так как первая строка - кол-во студентов, то читаем её
st = new student[n]; // выделяем память под n-студентов
// чтение из файла
for (int _i = 0; _i < n && !F.eof(); ++_i)
ReadData(F, st[_i]);
for (int _i = 0; _i < n; ++_i)
// проверка на наличие неудовлетворительных оценок
// если неудовлетворительных оценок нет, то производим запись в файл
if (Analyze(st[_i]))
WriteData(L, st[_i]);
F.close();
L.close();
delete [] st; // освобождаем память
return 0;
} |
|
При написании кода я копировал то, что было написано у вас, надеюсь не накосячил)