如何将多组数据存储到结构数组中?

时间:2015-05-10 03:21:39

标签: c++ arrays structure

我的代码用于接收数据文件并将其存储到结构数组中。截至目前,该代码存储了第一个学生的数据,但未能为连续的学生提供任何数据。我如何获得将文件其余部分的数据存储到结构的连续数组中的代码?

#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;
}

1 个答案:

答案 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++ ;
   // ...
}