Вот у меня есть задание, знаю что легче через структуру FILE, но задание - сделать с fstream. Записываем информацию про студентов: имя, группа, оценки по 5 предметам в файл. И читаем из файла. (функция по цифре 3 ещё не реализовал).
У меня не читает из файла - ничего не происходит.
#include <iostream>
#include <cstdio>
#include <fstream>
using namespace std;
string name1;
struct school {
string name;
string group;
char subject[5];
};
void create_array (school* &arr, int size) {
arr = new school[size]; //создание массива
for (int i=0; i<size; i++) {
cout<<"_ Student #"<<i+1<<" _"<<endl;
cout<<"Name: ";
cin>>arr[i].name;
cout<<"Group: ";
cin>>arr[i].group;
cout<<"< Marks >"<<endl;
cout<<"-Math: ";
cin>>arr[i].subject[0];
cout<<"-English: ";
cin>>arr[i].subject[1];
cout<<"-Chemistry: ";
cin>>arr[i].subject[2];
cout<<"-History: ";
cin>>arr[i].subject[3];
cout<<"-Literature: ";
cin>>arr[i].subject[4];
cout<<endl;
}
}
void write_array (school* &arr, int size) { //вывод в файл
ofstream out("info.txt");
for (int i=0; i<size; i++) {
out<<arr[i].name<<endl;
out<<arr[i].group<<endl;
out<<arr[i].subject[0]<<endl;
out<<arr[i].subject[1]<<endl;
out<<arr[i].subject[2]<<endl;
out<<arr[i].subject[3]<<endl;
out<<arr[i].subject[4]<<endl;
}
}
void read_array (school* &arr) { //вывод из файла
int i=0;
int k=0;
ifstream in("info.txt");
while (!in.eof()) k++;
arr = new school[k/7]; //создание массива
while (!in.eof()) {
in>>arr[i].name; cout<<"flag";
in>>arr[i].group;
in>>arr[i].subject[0];
in>>arr[i].subject[1];
in>>arr[i].subject[2];
in>>arr[i].subject[3];
in>>arr[i].subject[4];
cout<<"Name: "<<arr[i].name;
cout<<"Group: "<<arr[i].group;
cout<<"< Marks >"<<endl;
cout<<"-Math: "<<arr[i].subject[0]<<endl;
cout<<"-English: "<<arr[i].subject[1]<<endl;
cout<<"-Chemistry: "<<arr[i].subject[2]<<endl;
cout<<"-History: "<<arr[i].subject[3]<<endl;
cout<<"-Literature: "<<arr[i].subject[4]<<endl;
cout<<endl;
i++;
}
}
void search_array (school* &arr, int size) {
bool flag=0; //поиск в массиве
for (int i=0; i<size; i++) {
for(int j=0; j<5; j++) {
if (arr[i].subject[j]<=2) {
cout<<arr[i].name<<"\t\t"<<arr[i].group<<endl;
flag=1;
break;
}
}
}
if (flag==0) {
cout<<"no students"<<endl;
}
}
void delete_array (school* &arr) {
delete [] arr;
}
int main() {
school* arr1;
int size=1;
int f=1;
cout<<"1-Read info"<<endl;
cout<<"2-Write info"<<endl;
cout<<"3-Add info"<<endl;
cout<<">>";
cin>>f;
switch (f) {
case 1:
read_array(arr1);
break;
case 2:
cout<<"Number of students: ";
cin>>size;
cout<<endl;
create_array(arr1, size);
write_array(arr1, size);
break;
case 3:
cout<<"hello";
break;
default:
read_array(arr1);
}
cout<<"------------------------";
cout<<endl<<"Students with mark \"2\":"<<endl;
search_array(arr1,size);
delete_array(arr1);
return 0;
}
Вы открываете файл(к тому же не проверяете открыт ли он) и в цикле проверяете достигли ли конца файла? Естественно нет: вы еще в начале, и получаете бесконечный цикл:
void read_array (school* &arr) { //вывод из файла
int i=0;
int k=0;
ifstream in("info.txt");
while (!in.eof()) k++; //это уберите
что вы хотели сделать в цикле я даже не попытался понять...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Всем привет, возникла у меня необходимость в функции для работы с данными из структурыЯ решил сделать функцию частью структуры, у меня сразу...
Первым пунктом новости о выходе Qt 513 является объявление стабильного выпуска Qt for WebAssembly - поддержка исполнения Qt приложений в современных...
Все мы знаем, что если создать некую локальную переменную, например int a, в нее может попасть мусор и она не будет равна нулю, а может, например...