在 C++ 中读取文件时获取最后一个值打印两次

分享于2022年07月17日 c++ io stream 问答
【问题标题】:在 C++ 中读取文件时获取最后一个值打印两次(Getting last value printed twice when reading file in c++)
【发布时间】:2022-07-11 20:10:24
【问题描述】:

我是 C++ 新手。目前我正在学习如何读取和写入文件。我创建了一个文件“nb.txt”,内容如下:

1 2 3 4 5 6 7
2 3 4 5 6 7 9

我正在使用一个简单的程序来读取这个文件,循环直到到达 EOF。

#include 
#include 
using namespace std;

int main() {
    ifstream in("nb.txt");
    while (in) {
        int current;
        in >> current;
        cout << current << " ";
    }
}

我期望程序将输出所有值。 但我真正得到的是:

1 2 3 4 5 6 7 2 3 4 5 6 7 9 9

输出中有多个“9”。我不明白发生了什么!是因为while循环吗?

谁能帮我弄清楚为什么还有一个“9”?谢谢!


【解决方案1】:

问题 是在您读取最后一个值(在本例中为 9 )后, in 尚未设置为 文件结尾 。因此程序再次进入 while 循环,然后读取 in (现在将其设置为 文件结尾 )并且没有对变量 current 进行任何更改并打印出来与其当前值(即 9 )。

解决 此问题,您可以执行以下操作:

int main() {
    ifstream in("nb.txt");
    int current=0;
    while (in >> current) {  //note the in >> curent
       cout << current << " ";
    }
}

以上程序的输出可见 here :

1 2 3 4 5 6 7 2 3 4 5 6 7 9