使用cin.clear的一般目的是什么?

时间:2017-07-25 01:40:51

标签: c++ c++11 c++14

我是c ++的初学者,我无法理解cin.ignore&amp ;; cin.clear,他们对我毫无意义。当您向我解释时,请非常具有描述性

2 个答案:

答案 0 :(得分:1)

在C ++输入处理中,如果最后cin.fail()命令失败,cin将返回true。

通常,cin.fail()在以下情况下会返回true:

  1. 只要您到达EOF并尝试阅读任何内容,cin.fail()都会返回true。
  2. 如果您尝试读取整数并收到无法转换为整数的内容。
  3. cin.fail()返回true并发生错误时,cin的输入缓冲区将置于"错误状态"。该州将阻止进一步的输入处理。

    因此,您必须使用cin.clear()。它会覆盖流内部错误标志=>的当前值。所有位都被状态中的位替换,如果状态良好,则清除所有错误标志。

    对于cin.ignore,首先它将通过首先构造一个sentry对象来访问输入序列。之后,它从其关联的流缓冲区对象中提取字符,就像调用其成员函数sbumpcsgetc一样,最后在返回之前销毁该哨兵对象。

    因此,它通常用于执行提取和丢弃字符。 cin.ignore的经典案例是,当您在getline()之后使用cin时,它会在您的缓冲区中留下换行符,直到您切换功能为止。这就是为什么你必须从缓冲区中刷新换行符。

答案 1 :(得分:0)

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