Чтение из файла fstream

115
11 сентября 2021, 06:20

Вот у меня есть задание, знаю что легче через структуру 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;
}
Answer 1

Вы открываете файл(к тому же не проверяете открыт ли он) и в цикле проверяете достигли ли конца файла? Естественно нет: вы еще в начале, и получаете бесконечный цикл:

void read_array (school* &arr) { //вывод из файла
int i=0;
int k=0;
ifstream in("info.txt");
while (!in.eof()) k++; //это уберите

что вы хотели сделать в цикле я даже не попытался понять...

READ ALSO
передавать структуры в функции или вкладывать функции в структуры C++

передавать структуры в функции или вкладывать функции в структуры C++

Всем привет, возникла у меня необходимость в функции для работы с данными из структурыЯ решил сделать функцию частью структуры, у меня сразу...

150
Как настроить Qt для WebAssembly?

Как настроить Qt для WebAssembly?

Первым пунктом новости о выходе Qt 513 является объявление стабильного выпуска Qt for WebAssembly - поддержка исполнения Qt приложений в современных...

259
Ошибка функции sort()

Ошибка функции sort()

В Microsoft Visual Studio Community 2019, V 163

92
Переменные структуры при ее создании конструктором заполнены нулями или мусором?

Переменные структуры при ее создании конструктором заполнены нулями или мусором?

Все мы знаем, что если создать некую локальную переменную, например int a, в нее может попасть мусор и она не будет равна нулю, а может, например...

61