我有这个结构来保存学生信息:
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循环条件并仍能读取所有数据?我觉得它太长了
答案 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);
}