使用C++读取和打印文本文件时出错

cat*_*eof 0 c++

我的代码有错误(问题末尾的代码).我的C++可执行文件的目的是读取包含数字的文件,将其复制到std :: vector中,然后只打印stdout中的内容?问题出在哪儿?(ATOI?)

我有一个简单的文本文件,其中包含以下数字(每行有一个数字)

mini01:algorithms ios$ cat numbers.txt 
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

当我执行程序时,我再收到一行:

mini01:algorithms ios$ ./a.out 
1
2
3
4
5
0
Run Code Online (Sandbox Code Playgroud)

为什么我在标准输出中获得第6行?

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;

void algorithm(std::vector<int>& v) {

    for(int i=0; i < v.size(); i++) {
        cout << v[i] << endl;
    }

}

int main(int argc, char **argv) {

    string line;
    std::vector<int> vector1;
    ifstream myfile("numbers.txt");
    if ( myfile.is_open()) {
        while( myfile.good() )
        {
            getline(myfile, line);
            vector1.push_back(atoi(line.c_str()));
        }
        myfile.close();
    }
    else {
        cout << "Unable to open file" << endl;
    }

    algorithm(vector1);

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 6

你不应该使用while (myfile.good()),因为它会循环一次到多次.

而是使用

while (getline(...))
Run Code Online (Sandbox Code Playgroud)

您无法使用标志来检查循环的原因是,输入/输出操作注意到问题(错误或文件结束)之后,它们才会被设置.