【发布时间】:2019-12-09 04:59:43
【问题描述】:
我正在尝试读取以下格式的文件:1,2,4,6,8,12,12, .我想使用 getline() 和 stringstream 对象来分隔输入,并在转换为整数后将其存储到向量中。它可以工作,我可以看到输出能够添加数字一,但在完成转换文件中的所有数字后它仍然抛出异常。
输出: 2 3 5 7 9 13 13
#include <stdio.h>
#include <string>
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
#include <algorithm>
using namespace std;
int main (int argc, char** argv){
ifstream infile;
vector <int> vect;
infile.open("tested");
if(!infile.is_open()){
cout<<"File did not open"<<endl;
}
else{
while(!infile.eof()) {
string line;
getline(infile, line);
stringstream ss(line);
while (ss){
string p;
getline(ss, p, ',');
int x = stoi(p);
cout<<x+1<<endl;
vect.push_back(x);
}
}
int i=0;
while(i<vect.size()){
int e = vect[i];
cout<<e<<endl;
i++;
}
sort(vect.begin(), vect.end());
int j=0;
while(j<vect.size()){
int n = vect[j];
cout<<n<<endl;
j++;
}
cout<<"end reached"<<endl;
}
}
【问题讨论】:
-
当
line在getline()之后为空时会发生什么? -
@SidS 据我了解,它只会调用 getline 一次,因为它会跳出 while 循环,因为我们已经到达文件末尾,这意味着 (!infile_.eof()) 条件会遇到的。
-
您是否有任何迹象表明该假设是正确的?依赖
eof()可能是您问题的主要部分。尝试检查来自getline()的返回值。 -
另外,测试
infile,而不是!infile.eof() -
@SidS 我试过 infile,它仍然抛出异常,我不明白你检查 getline 的返回值是什么意思?
标签: c++ string vector file-io stringstream