为什么我的c++代码只从输入文件中读取一行?

Why is my C++ code reading only one line from the input file?

本文关键字:读取 一行 文件 c++ 我的 代码 输入 为什么      更新时间:2023-10-16

考虑以下内容:

#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,并在成功时继续循环。如果因为任何原因而失败,则跳出循环。