为什么我的c++代码只从输入文件中读取一行?
Why is my C++ code reading only one line from the input file?
考虑以下内容:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
int score;
char grade;
ofstream myfileo;
ifstream myfilei;
myfilei.open ("example.txt");
while (!myfilei.eof()) {
myfilei >> score;
cout << "Enter your score:" << endl;
if (score >= 90)
grade = 'A';
else if (score >= 80)
grade = 'B';
else if (score >= 70)
grade = 'C';
else if (score >= 60)
grade = 'D';
else
grade = 'F';
cout << "Your grade was a" << grade << endl;
switch (grade) {
case 'A': case 'B':
cout << "Good job" << endl;
break;
case 'C':
cout << "Fair job" << endl;
break;
case 'F': case 'D':
cout << "Failure" << endl;
break;
default:
cout << "invalid" << endl;
}
}
myfilei.close();
myfileo.close();
return 0;
system ("PAUSE");
}
此代码仅读取examples.txt
文件中的最后一行,该文件中充满了"scores"格式如下:
95
21
41
78
91
为什么上面的代码不读入并输出所有行?
编辑。这是一个无限循环
在while循环中,您会不断覆盖'score',因此它只会是文本文件中的最后一个值。如果需要从文件中获取多个值,最好使用数组(或类似的)并将它们添加到数组中。
while (!myfilei.eof()) {
myfilei >> score;
}
这段代码一行一行地读取,然后在到达文件末尾时继续读取。这就是为什么你只看到它处理最后一行。
任何你想每行执行一次的代码都应该在循环内的。例如,直到
myfilei.close();
而且,由于所有这些代码在文件中每行执行一次,因此输出不需要在循环中。
//while (!myfilei.eof()) {
myfileo << grade << " " << score << endl;
//}
[编辑]
现在无限重复的问题是因为myfilei.eof()
将总是返回false,如果另一个错误先发生。(就像我的测试用例一样,文件无法打开。)基本的经验法则:永远不要检查.eof()
。这是大多数人所做的:
while (myfilei >> score) {
//code for this score
}
//end of file or error
这将尝试从myfilei
读入score
,并在成功时继续循环。如果因为任何原因而失败,则跳出循环。
相关文章:
- 需要从存档中读取一行文本.txt直到找到"hhh",然后转到下一行
- 从文本文件中读取一行并将其存储在 C++ 中的 2D 矢量中
- 使用std::getline()读取一行
- C++ : 如何在使用 getline() 和 ifstream 对象从文件中读取一行时跳过第一个空格?
- 如何从文本文件中读取一行并将其分为不同的变量
- 使用 getline 从输入文件读取一行到输出文件
- 如何在文本文件中仅读取一行,该文本文件使用QT具有特定单词
- 无法弄清楚为什么只从文件中读取一行矩阵以及为什么我无法将 2D 数组传递给函数
- 如何从文件中读取一行中的特定字符
- c++从ifstream中读取一行的最后一个变量
- 无法从文件中读取一行的所有整数(ifstream)
- 从文件中读取一行并将其放入字符串中(使用 fstream)
- 从.txt文件中读取一行,然后插入变量
- 从文件中读取一行,并在其中搜索字符串(c++)
- 在c++中读取一行.txt文件的一部分
- 我无法使用 getline() 读取一行
- std::getline只读取一行:
- 启动 QProcess 并一次读取一行输出
- C++以int形式读取一行字符串
- 在C++中读取一行之后的行不起作用