我的代码有错误(问题末尾的代码).我的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)
你不应该使用while (myfile.good()),因为它会循环一次到多次.
而是使用
while (getline(...))
Run Code Online (Sandbox Code Playgroud)
您无法使用标志来检查循环的原因是,在输入/输出操作注意到问题(错误或文件结束)之后,它们才会被设置.