【发布时间】:2017-03-31 09:29:27
【问题描述】:
我得到getline(ifstream foo, string bar)函数的语法,我知道它的第三个参数是分隔符,设置为'\n'。
我有一个文件要读取,它的第一列和第二列都有数字。 问题是在第三列,我必须阅读可能包含空格的国家/地区名称。
我已经检查我的代码肯定成功地从前两列读取数字,但是当我的代码尝试读取国家/地区名称时,我收到了 'Segmentation fault (cord dumped)' 错误消息。
我的代码如下所示:
string name[50];
double year1[50],year2[50];
fstream ifstr;
ifstr.open("thefile.csv");
for (int i=0; (!(ifstr.eof())) || i < 51; i++) {
ifstr >> year1[i] >> year2[i];
getline(ifstr, name[i]);} // expecting this line to be reading/storing
//anything that comes after 3rd column into string array
我的赋值给定的变量太长太复杂了,所以我把它写出来以提高可读性,但那一行几乎就是问题所在。
从说明书上,我的教授提到了
读取人口很简单,可以使用 我们在课堂上介绍的标准文件 IO 函数(即,“>>”使用 输入流)。但是,由于某些国家/地区的名称包含 空格,我们需要使用 getline 而不是 >> 作为名称字段。 幸运的是,国家是最后一个字段,所以我们可以使用“>>”来阅读 人口,然后一条 getline 完成这条线。 您将需要输入数据,直到到达文件末尾。回想一下,如果在文件末尾,getline 的返回值为 false,所以它的 很容易检查。
我查找了有关此主题的所有可用资源,但到目前为止我找不到解决此问题的资源。
请指教。
【问题讨论】:
-
您有
while(!eof)反模式的组合,并且读取越界(例如,访问year1[50]是未定义的行为)。