从文件中读入信息

时间:2018-02-11 03:41:57

标签: c++ struct

我有这个结构来保存学生信息:

struct student_info {
    int year;
    string course_name;
    int course_id;
    string student_name;
    int student_id;
};

我从文件中读到这样的内容:

    ifstream infile ("info.txt");

    while(infile >> year >> course_name >> course_id >> student_name >> student_id) {
        // do stuff
    }

我想知道是否有办法缩短while循环条件并仍能读取所有数据?我觉得它太长了

3 个答案:

答案 0 :(得分:4)

  

我想知道是否有办法缩短while循环条件并仍能读取所有数据?

无论如何,你都必须阅读结构的各个成员。您可以通过重载while来简单地operator>>(std::istream&, student_info&)语句。

std::istream& operator>>(std::istream& in, student_info& info)
{
   in >> info.year;
   in >> info.course_name;
   in >> info.course_id;
   in >> info.student_name;
   in >> info.student_id;
   return in;
}

并将其用作:

ifstream infile ("info.txt");
student_info info;

while(infile >> info) {
    // do stuff
}

答案 1 :(得分:0)

您可以通过多种方式缩短线路。例如,您可以完整地读取每一行,然后解析每行的每个字段:

std::string line;
ifstream infile ("info.txt");


while(std::getline(infile,line)) {
    std::istringstream iline(line);

    int year;
    std::string course_name;
    int course_id;
    std::string student_name;
    int student_id;

    //omitting error checking for brevity
    iline >> year;

    //do stuff with year

    iline >> course_name;
    //etc..

}

答案 2 :(得分:-1)

您可以使用 eof()方法检查是否已达到EndOfFile。我已修改您的代码以读取student_info结构并附加到向量。

ifstream infile("info.txt");
vector<student_info> vs;

while (!infile.eof())
{
    student_info st;
    infile >> st.year;
    infile >> st.course_name;
    infile >> st.course_id;
    infile >> st.student_name;
    infile >> st.student_id;
    vs.push_back(st);
}