当 getline 直到新行才读取时会发生什么?
What happens when getline does not read until new line?
我看过不少相关帖子,但没有得到以下问题的答案。
考虑:
char buffer[4];
cin.getline(buffer, 4);
cout << buffer << endl;
cin.getline(buffer, 4);
cout << buffer << endl;
如果我在输入时输入abc
,我有机会输入第二行,并且两行都正确出现在输出中。但是,如果我输入abcd
或者就此而言,输入超过三个字符的任何内容,我将无法输入第二行,并且输出的第二行为空。到底是怎么回事?
我们看到std::basic_istream<CharT,Traits>::getline()
提取字符 [...] 直到任何 发生以下情况(按所示顺序进行测试(:
文件结束条件出现在输入序列中(在这种情况下,执行
setstate(eofbit)
(下一个可用字符
c
是分隔符,由Traits::eq(c, delim)
确定。提取分隔符(与basic_istream::get()
(并计入gcount()
,但不存储。已提取
count-1
字符(在这种情况下,将执行setstate(failbit)
(。如果函数不提取任何字符(例如,如果
count < 1
(,setstate(failbit)
被执行。无论如何,如果
count>0
,它会存储一个空字符CharT()
数组的下一个连续位置,并更新gcount()
。
在我们的例子中,因为我们输入了太多的字符用于存储,所以我们遇到了第三个条件,并且在流上设置了失败位。
可以使用std::cin.clear()
取消设置故障位。
相关文章:
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 当 getline 直到新行才读取时会发生什么?
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 与普通变量相比,仅仅读取原子变量的性能有什么不同吗
- 读取二进制文件的惯用C++17标准方法是什么
- 从包含 IP 标头片段的二进制文件中读取结构的最佳方法是什么
- 在什么情况下,从流(结束)读取会导致停止?
- 此读取功能有什么问题
- 有什么方法可以在C++中读取文本并执行这样的代码命令吗?
- 如何读取NM命令:NM选项-T和-U(未定义)是什么意思
- 在写依赖性之后,读取了什么
- C (Visual Studio):尝试从.txt文件读取输入时什么都没有收到
- 使用运算符读取文件和使用读取功能>>文件有什么区别?
- 从 http 流中读取和写入有什么要求(在 boost::beast 中)?
- 如何从C 中的HDF5文件中读取属性名称和数据集名称,在这里我不知道HDF5文件中存在什么属性
- 嵌入式串行读取操作和桌面PC之间可能有什么区别
- 读取四个数据文件并使用函数将它们放入结构数组的最佳方法是什么
- 从 char* 缓冲区读取int32_t的惯用 cpp14 方法是什么?
- 我想从文件中读取数据块并将其存储在矢量<string> buf 中。我做错了什么?
- 将文件的全部内容读取到标准输出的最短方法是什么