c++ - 最后一行被打印两次(C++)

标签 c++

<分区>

我有一个名为 scores.txt 的文本文件,其中包含以下数据:

John T Smith 90
Eric K Jones 103
Ram S Krishnan 25
Marie A Bell 50

我正在尝试从此文件中读取数据并使用以下 C++ 代码打印它:

ifstream input;
input.open("scores.txt");
string firstName;
char mi;
string lastName;
int score;

while (input) {
    input>>firstName>>mi>>lastName>>score;
    cout<<firstName<<" "<<mi<<" "<<lastName<<" "<<score<<endl;
}

input.close();
cout<<"Done"<<endl;

输出是:

John T Smith 90
Eric K Jones 103
Ram S Krishnan 25
Marie A Bell 50
Marie A Bell 50

为什么最后一行 (Marie A Bell 50) 被打印了两次?我怎样才能防止这种情况发生?

最佳答案

这是因为就在您读取文件的最后一行之后,input 还没有到达文件末尾。您的程序第五次进入 while 循环,读取 input(将其设置为 文件结束 状态),不会改变您的变量并打印出来。

避免这种情况的一种方法(在许多方法中)是写类似的东西

while (input >> var1 >> var2)
{
    std::cout << var1 << "," << var2 << std::endl;
}

关于c++ - 最后一行被打印两次(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34166697/

相关文章:

c++ - 为什么当 T 是类类型时 std::is_base_of<T, T> 为真,而当 T 是内置类型时为假?

c++ - 简单链表C++函数调用后指针自动改变

c++ - C 和 C++ 中几乎相同的代码在执行时间上的巨大差异 (x9)

c++ - 类中使用的类对象数组

c++ - Serial.println 改变函数的返回值 (Arduino)

c++ - 从 C++ 中的其他文件访问函数时遇到问题

c++ - MS Word InsertBreak 抛出异常

c++ - 简单的 C++ 代码不会运行

c++ - 在 64 位机器上进行 Crypto++ 32 位编译

c++ - 如何在 OpenGL 中的地形上添加单个纹理?