我得到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功能(即&#34;&gt;&gt;&#34;使用 输入流)。但是,由于某些国家的名称包含 空格,我们需要使用getline而不是&gt;&gt;为名称字段。 幸运的是,这个国家是最后一个领域,所以我们可以使用&#34;&gt;&gt;&#34;阅读 人口,然后获得完成线的getline。 您需要输入数据,直到到达文件末尾。回想一下,如果在文件末尾,getline的返回值为false,那么它就是 很容易检查。
我查找了有关此主题的所有可用资源,但到目前为止我找不到解决此问题的资源。
请告知。
答案 0 :(得分:1)
您的循环条件错误。您应该只在这些值的两个都为真时循环。如果其中任何一个变为假,你应该停止。因此||
实际应该是&&
。
你也有一个超出范围的问题。条件i < 51
是错误的。当您对数组进行索引时,i
的值为50会溢出。所以正确的条件是i < 50
。
最后,eof
不是流上唯一会导致您停止阅读的条件。只需使用流的bool运算符。
for( int i = 0; ifstr && i < 50; i++ )