getline()的实际行为是怎样的?
How does getline() actually behave?
本文关键字:getline 更新时间:2023-10-16
我有两个问题:
-
如果我在while循环结束后再次执行"getline(in,line)",s会发生什么?
ifstream in("string.txt"); string s, line; s = ""; while(getline(in,line)) { s = s + line + "n"; } cout<<s<<endl<<"******************************************"<<endl;
-
getline()函数:每次调用它时,它是否会转到上述代码中ifstream"in"对象的"下"行?如果是这样,当while循环结束并再次调用相同的函数时会发生什么?(几乎和第一个问题一样,只是细微的差别)
如果我在while循环结束后再次执行"getline(in,line)",s会发生什么?
当std::getline()
返回类似于布尔值false
的值时,循环结束。当您查看函数的签名时,您将看到它返回流。流有一个隐式转换,可以转换成类似于其状态的布尔值。如果if(stream)
将流评估为false
,则意味着流处于不良状态。这可以是EOF标志集,也可以是其中一个错误标志,或者两者都有。
任何使用处于不良状态的流的尝试都将失败。什么也不会读。
getline()函数:每次调用它时,它是否会转到上述代码中ifstream"in"对象的"下"行?如果是这样,当while循环结束并再次调用相同的函数时会发生什么?(几乎和第一个问题一样,只是细微的差别)
这与std::getline()
无关。打开文件中的位置是(文件)流的一个属性。每次(重新)打开文件进行读取时(不传递设置位置的额外参数),位置被设置为流(文件)的开头。
getline
读取流,直到遇到换行符或到达流的末尾。在后一种情况下,蒸汽将设置其失效位。这意味着在示例中打破了while
循环,因为getline
返回(引用)流,该流被强制转换为bool
,由于前面提到的failbit,生成流的状态为false
。
getline
的调用将不做任何事情,因为流仍然处于"失败"状态。您可以使用istream::clear
清除它,但由于其中没有更多的数据,因此在下次读取时再次设置其failbit
相关文章:
- Seg Fault Issue C++ (file IO / getline)
- 当用户键入分隔符时,停止getline()输入
- getline() 的原型/库是什么;
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 如何在 c++ 中使用 ',' 作为 getline 分隔符
- 错误:调用'getline'没有匹配函数
- 如何在 c++ 中使用 getline 从文件中读取字符串?
- 将 getline() 与文件一起使用
- 我有三个 getline,但是一旦编译,输入就太多了
- 在 std::getline 和 std::cin 期间卡在循环中
- 为什么 getline() 不读取文本文件中的所有内容?
- 有没有办法在不使用 getline() 的情况下从.csv文件中读取?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- std::getline没有在while循环中重新请求用户输入
- 谁能告诉我我用 getline 做错了什么 (cpp) 格式
- Getline(cin,str)的奇怪输出
- 我在C++中使用 getline() 函数时遇到问题
- 而循环跳过 cin.getline() 对于 C 字符串
- 如何在 getline 中删除/忽略超过特定数字的字符?
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)