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

What the general purpose when using cin.clear?

本文关键字:是什么 一般用 cin clear 使用      更新时间:2023-10-16

我是 c++ 的初学者,我只是无法理解 cin.ignore 和 cin.clear,它们对我来说完全没有意义。当你向我解释这一点时,请非常描述

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

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

  1. 每当你到达EOF并尝试阅读任何内容时,cin.fail()都会返回 true。
  2. 如果您尝试读取整数,它会收到无法转换为整数的内容。

cin.fail()返回 true 并发生错误时,cin的输入缓冲区处于"错误状态"。该状态将阻止进一步的输入处理。

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


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

因此,它通常用于执行提取和丢弃字符。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