使用cin.clear的一般用途是什么?
What the general purpose when using cin.clear?
我是 c++ 的初学者,我只是无法理解 cin.ignore 和 cin.clear,它们对我来说完全没有意义。当你向我解释这一点时,请非常描述
在C++输入处理中,如果最后一个cin
命令失败,cin.fail()
将返回 true。
通常,在以下情况下,cin.fail()
将返回 true:
- 每当你到达
EOF
并尝试阅读任何内容时,cin.fail()
都会返回 true。 - 如果您尝试读取整数,它会收到无法转换为整数的内容。
当cin.fail()
返回 true 并发生错误时,cin
的输入缓冲区处于"错误状态"。该状态将阻止进一步的输入处理。
因此,您必须使用cin.clear()
.它将覆盖流内部错误标志的当前值 => 所有位都将替换为处于状态的位,如果状态良好,则清除所有错误标志。
对于cin.ignore
,首先它将通过首先构造一个sentry
对象来访问输入序列。之后,它从其关联的流缓冲区对象中提取字符,就像调用其成员函数sbumpc
或sgetc
一样,最后在返回之前销毁哨兵对象。
因此,它通常用于执行提取和丢弃字符。cin.ignore
的经典情况是,当您在cin
之后使用getline()
时,它会在缓冲区中留下换行符,直到您切换功能。这就是为什么您必须将换行符从缓冲区中冲出的原因。
std::cin.ignore()
可以以三种不同的方式调用:
无参数:从输入缓冲区中获取单个字符并丢弃:
std::cin.ignore(); //discard 1 character
一个参数:指定的字符数从输入缓冲区中获取并丢弃:
std::cin.ignore(33); //discard 33 characters
两个参数:丢弃指定的字符数,或丢弃不超过并包含指定分隔符的字符(以先到者为准(:
std::cin.ignore(26, 'n'); //ignore 26 characters or to a newline, whichever comes first
来源: http://www.augustcouncil.com/~tgibson/tutorial/iotips.html
相关文章:
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 隐式调用的含义是什么?
- C++:Lambda 函数指针转换的用例是什么?
- 我遇到了黑客排名中的问题"TWO STRINGS"的三个测试用例的分段错误。原因是什么?
- 用C++编写正则表达式的正确方法是什么?
- 用相同的参数声明两个构造函数的最偶像化的方法是什么?
- 在集合的情况下使用emplace_hint的用例是什么?
- boost::hana 转发声明标头的用例是什么?
- 结构化绑定的用例是什么?
- 使用cin.clear的一般用途是什么?
- 在所有程序中,在Visual Studio中添加OpENCV的一般方法是什么?
- decltype((x)) 用双括号是什么意思
- 对于C NTH_Element算法,什么是有趣的用例
- 我在用c ++编程时一直遇到LNK2005错误,我似乎无法弄清楚问题是什么
- 在保留类名的同时弃用类模板的正确过程是什么?
- 用CreateFile打开显示时,正确的路径是什么?
- 用一个字符制作 std::string 的最佳方法是什么?
- 在 C++17 中弃用"std::result_of"的原因是什么?
- 什么时候应该将 Stream 从 DataWriter 和 DataReader 中分离出来?此 I/O 模型的一般准则是什么?
- 用Accept4()设置SOCK_CLOEXEC标志的目的是什么?