所以我有这个问题。
“当数据如下所示时,编写一个完整的程序来读取名为”ingolf.txt“的文件中的数据:
78 78史密斯乔 67 69莫里斯马克
65 88 Kimball Craig
...
73 75 Dennison David
其中3个点表示更多的数据行“
这是我用来读取文件的循环。
string line;
while(getline(dataFile, line)) {
dataFile >> round1;
dataFile >> round2;
dataFile >> firstName;
dataFile >> lastName;
cout << round1 << " ";
cout << round2 << " ";
cout << firstName << " ";
cout << lastName << " ";
}
当我使用此循环时,它会重复上一次文件行两次。难道我做错了什么? 我在此之前使用了eof()并且它工作但我读到这是不好的做法所以我发现这个循环使用了。我也不确定为什么我需要一个变量。该文件的大小未知。我是初学者所以请以noob友好的方式解释:D
答案 0 :(得分:1)
你应该拥有的是
string line;
while(getline(dataFile, line)) {
istringstream is(line);
is >> round1;
is >> round2;
is >> firstName;
is >> lastName;
// ...
}
在您的示例中getline()
已经从输入流中消耗了一行,您将进入循环体,并再次使用
dataFile >> round1;
dataFile >> round2;
dataFile >> firstName;
dataFile >> lastName;
来自输入流(实际上是下一行)。所以你交替扔掉/错过输入线。
答案 1 :(得分:1)
您应该读取一行,然后解析各个字段或直接读入变量。 πάνταῥεῖ发布了一个显示第一个选项的答案,这是第二个选项:
while (dataFile >> round1 >> round2 >> firstName >> lastName) {
cout << round1 << " ";
cout << round2 << " ";
cout << firstName << " ";
cout << lastName << " ";
// ...
}
请注意,这将起作用,因为每个字段都以空格分隔。如果字段可以包含空格,则需要使用不同的方法。