我有一个包含以下格式数据的文件:
name1 p1 p2 ... p11
name2 p1 p2 ... p11
...
(参数不一定在一行中)
我的目标是读取名称和11个参数,对它们执行某些操作,然后对下一个数据块执行相同操作,直到不再存在。下面的代码做得很好,但是在到达文件末尾之后,它会再执行一次读取垃圾的操作。任何人都可以帮我解决这个问题吗?
std::ifstream file("data.txt");
std::string name;
double p[11];
while(file.peek() != EOF){
file >> name
>> p[0] >> p[1] >> p[2] >> p[3]
>> p[4] >> p[5] >> p[6] >> p[7]
>> p[8] >> p[9] >> p[10];
/*
doing something with the data
*/
}
file.close();
答案 0 :(得分:1)
在c ++中执行此操作的常用方法是在执行提取后检查流状态:
while(file >> name
>> p[0] >> p[1] >> p[2] >> p[3]
>> p[4] >> p[5] >> p[6] >> p[7]
>> p[8] >> p[9] >> p[10]) {
/*
doing something with the data
*/
}
如果输入中没有更多数据或错误,循环将停止。
以下是一些有关其工作原理和原因的更多信息: