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。上面的循环将永远不会执行。当他到达这里时,情况是错误的。