为什么我的代码从输入文件读取一行。 C ++不确定

时间:2011-10-04 16:04:22

标签: c++

请考虑以下事项:

#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文件中的最后一行,其中包含如下格式的“得分”:

95
21
41
78
91

为什么上面的代码没有读入并输出所有行?


现在编辑它只是一个无限循环

2 个答案:

答案 0 :(得分:3)

在你的while循环中,你不断覆盖'得分',因此它只会是文本文件中的最后一个值。如果您需要从文件中获取多个值,则最好使用数组(或类似数据)并将其添加到该文件中。

答案 1 :(得分:1)

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,并且循环在成功时继续。如果任何原因失败,它就会突破循环。