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

C++ 为什么我的C++;从输入文件中只读取一行的代码?,c++,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 (!m

考虑以下几点:

#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");
}
为什么上面的代码不读入并输出所有行


现在编辑。这只是一个无止境的循环。

在while循环中,您不断地覆盖“score”,因此它将永远只是文本文件中的最后一个值。如果需要从文件中获取多个值,最好使用数组(或类似数组)并将它们添加到该数组中。

在while循环中,您不断地覆盖“score”,因此它将永远是文本文件中的最后一个值。如果需要从文件中获取多个值,最好使用数组(或类似数组)并将它们添加到该数组中

while (!myfilei.eof()) {
    myfilei >> score;
}  
这一位代码逐行读取,然后在到达文件末尾时继续。这就是为什么您只看到它处理最后一行。
您希望每行执行一次的任何代码都应该在这个循环中。一切顺利

myfilei.close(); 
此外,由于所有代码在文件中每行执行一次,因此输出不需要在循环中

//while (!myfilei.eof()) {
    myfileo << grade << " " << score << endl;
//}  
这将尝试从
myfilei
读取到
score
,循环在成功时继续。如果它因任何原因失败,它就会跳出循环

这一位代码逐行读取,然后在到达文件末尾时继续。这就是为什么您只看到它处理最后一行。
您希望每行执行一次的任何代码都应该在这个循环中。一切顺利

myfilei.close(); 
此外,由于所有代码在文件中每行执行一次,因此输出不需要在循环中

//while (!myfilei.eof()) {
    myfileo << grade << " " << score << endl;
//}  

这将尝试从
myfilei
读取到
score
,循环在成功时继续。如果由于任何原因失败,它将中断循环。

当然,它只执行最后一行,您的循环将一直读取到文件末尾。@poco:您应该将该注释作为一个答案!可能重复将
while
关闭括号移动到刚好在
myfilei.close()之前当我扩展阅读循环以包含截止到结束的所有内容时,它是一个永无止境的输入你的分数X100000000000当然它只做最后一行,你的循环一直读到文件的结尾。@Proco:你应该把那条评论作为答案!可能重复将
while
关闭括号移动到刚好在
myfilei.close()之前当我扩展阅读循环以包含所有内容直到结束时,它是一个永无止境的输入你的分数x100000000000不需要数组,只需扩展阅读循环以包含所有内容直到
结束时;如果第一个循环实际上对应于他想要做的事情,那么它应该是
while(myfilei>>score)…
。(将
score
的所有处理都放在这个循环中可能会完全解决问题。)当我扩展阅读循环以包括所有内容直到结束时,它是一个永无止境的输入你的分数x100000000000无需数组,只需扩展阅读循环以包括所有内容直到
close
,他读取第一个循环中最后一个元素之后的一个;如果第一个循环实际上对应于他想要做的事情,那么它应该是
while(myfilei>>score)…
。(将
score
的所有处理放在这个循环中可能会完全解决问题。)当我扩展阅读循环以包括所有内容直到结束时,它是一个永无止境的输入你的分数x100000000000,上面的循环将永远不会执行。当他到达这里时,条件为false。上面的循环将永远不会执行。当他到达这里时,情况是错误的。