使用getline从输入文件流中读取字符串和数字
reading strings and numbers from input file stream using getline
我得到了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而不是>>作为name字段。幸运的是,国家是最后一个字段,所以我们可以使用">>"来读取然后用一条直线来完成这条直线。您将需要输入数据,直到到达文件的末尾。回想一下,如果在文件末尾,getline的返回值为false这很容易检查
我查阅了所有关于这个话题的资料,但是到目前为止我还没有找到一个解决这个问题的。
请建议。
您的循环条件错误。只有当两个值都为真时才应该循环。如果其中任何一个变成假的,你应该停止。所以||
实际上应该是&&
。
你也有一个超出范围的问题。条件i < 51
是错误的。如果i
的值为50,则会在索引数组时使其溢出。所以正确的条件是i < 50
。
最后,eof
不是流中应该导致停止读取的唯一条件。只使用流的bool操作符。
for( int i = 0; ifstr && i < 50; i++ )
相关文章:
- 如何使用Luacneneneba API正确读取字符串和表参数
- 如何从二进制文件中读取字符串
- 如何在 c++ 中使用 getline 从文件中读取字符串?
- 读取字符串文本输入以创建 2D 矢量
- 罗马数字到阿拉伯语 (vinculum) - 读取字符串中的字符
- C++:从文件中读取字符串和整数,并获得最大数字
- C++,从文件中读取字符串,分段错误
- 如果语句错误地读取字符串,则始终在第一个条件返回
- 如何从内存中读取字符串?
- 如何创建一个C++程序来读取字符串数组中的信息,然后将其排序到类中?
- 我需要C++读取字符串数组中每个单词的第一个字母
- 读取字符串C++的字符时出错
- 读取字符串直到标志 (C++)
- 读取字符串字符时出错 - 对于数组中的字符串值
- C++输入文件流无法从文件中读取字符串
- 读取字符串字符时出错
- 如何读取<字符串,矢量<对<int,字符串的映射>>>
- 如何使此函数使用 getline 读取字符串并使用 int 执行相同的行为?
- C++ 使用 Strtok 读取字符串字符时出错
- 使用 getline 读取字符串,但每行中都有换行符