如何将多组数据存储到一系列结构中

How to store multiple sets of data into an array of structures?

本文关键字:一系列 结构 存储 数据      更新时间:2023-10-16

我的代码旨在接收数据文件并将其存储到一系列结构中。截至目前,该代码存储了第一个学生的数据,但没有为连续的学生提供任何内容。我将如何获取代码将文件的其余部分存储到结构的连续阵列中?

#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
struct student{
string fname, lname, id, classname[20];
char grade[20];
int units[20], unitstaken, unitscompleted, numberofclasses;
float gpa, points[20], avg;
};
void doesitrun(ifstream& fin, string& filename);
void readit(student& temp, ifstream& fin);
int Read_List(student& child, int size);
int main(){
int i = 0;
ifstream fin;
string filename;
student u[20];
doesitrun(fin, filename);

readit(u[i], fin);
Read_List(u[i], 20);

}
void doesitrun(ifstream& fin, string& filename){
bool trueorfalse;
cout << "Enter file name along with location: ";
getline(cin, filename);
cin.ignore(20, 'n');
fin.open(filename.c_str());
if (fin.fail())
    trueorfalse = false;
else
    trueorfalse = true;
while (trueorfalse == false){
    cout << "File does not run. Please try again. " << endl;
    fin.close();
    cout << "Enter file name along with location: ";        
    getline(cin, filename);
    fin.open(filename.c_str());
    if (fin.fail())
        trueorfalse = false;
    else
        trueorfalse = true;
}
}
void readit(student& temp, ifstream& fin){
int i = 0;
getline(fin, temp.lname, ',');
cin.ignore();
getline(fin, temp.fname);
fin >> temp.id;
fin >> temp.numberofclasses;
fin.ignore(10, 'n');
for (i = 0; i < temp.numberofclasses; i++){
getline(fin, temp.classname[i]);
fin >> temp.grade[i];
fin >> temp.units[i];
fin.ignore(10, 'n');
}
}
int Read_List(student child[], int size)
{
ifstream    fin;
int     i = 0;
readit(child[i], fin);
while (!fin.eof())
{
    i++;
    if (i >= size)
    {
        cout << "Array is full.n";
        break;
    }
    readit(child[i], fin);
}
fin.close();
return i;
}

可能还有其他与文件格式相关的问题,但是从开始,为什么iostream :: eof在环上被认为是错误的?

然后尝试类似的东西,

struct student 
{
    //...
    friend std::istream & operator >> ( std::istream& is, student& temp ) ;
}
std::istream & operator >> ( std::istream& is, student& temp )
{
    readit( temp , is );
    return is ;
}

Read_List

while ( fin >> child[i] )
{
   i++ ;
   // ...
}