我得到getline(ifstream foo, string bar)
函数的语法,我知道它的第三个参数是分隔符,它被设置为'\ n'。使用getline从输入文件流中读取字符串和数字
我有一个文件要读取,它有第一和第二列的数字。 问题是在第三列中,我必须读取可能包含空格的国家的名称。
我检查过我的代码是成功地从前两列中读取数字的,但是当我的代码尝试读取国家名称时,出现'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,所以它的 很容易检查。
我查了一下所有关于这个主题的资源,但是我找不到解决这个问题的人。
请指教。
你的组合['而(!EOF)'](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-错误)反模式,并且读出界限(例如,访问'year1 [50]'是未定义的行为)。 – user657267