我的代码用于接收数据文件并将其存储到结构数组中。截至目前,该代码存储了第一个学生的数据,但未能为连续的学生提供任何数据。我如何获得将文件其余部分的数据存储到结构的连续数组中的代码?
#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;
}
答案 0 :(得分:1)
可能存在与文件格式相关的其他问题,但如何以Why is iostream::eof inside a loop condition considered wrong ?
开头然后尝试类似的事情,
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++ ;
// ...
}