C++里一般什么时候要用到cin.clear(),有没有总结?求指教。(PS:知道意思,但是不怎么会用)

如题所述

cin.clear(); //清除cin流的错误状态

C++语句cin.clear();中的clear()是什么函数,原型是?

答:检举将一个出错的流的状态恢复为“好”。但也不完全是,因为它也可以把“好”的流变成“坏”。

其默认参数为:
ios::goodbit

故语句:
cin.clear()

清除cin流,并设置goodbit状态位。

同理,语句:
cin.clear(ios::failbit)

清除cin流,并设置failbit状态位,该位代表一般可修复的小错误,自然还可以设置其他几个状态位,但普通情况下,很少用到。还是以goodbit位用的最多。由于它是默认参数,所以不需显示传递,故而你最常看到的就是:
cin.clear()
这句了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-31
iosteram 中有一个 ios_base::iostate 它一般有goodbit,eofbit,failbit,badbit,这几中状态组合而成,用来标志流的状态。
比如如下代码需要一个int类型,但是输入了非int类型,iostate 会设置相应的标志为用来标志出现何种错误,此时,流是处于不正常状态的, 要想接着用该流, 就需要clear来清除错误标志了
int main ()
{
int a = 0;
while (a != -1)
{
cin >> a;
if ( (cin.rdstate() & std::iostream::failbit ) != 0 )
{
cout << "failbit is set" << endl;
cin.clear();
cin.ignore(1000,'\n');
}
else
cout << a << endl;;
}
其他的错误类型比如打开不存在的文件了, 文件到达末尾了,相应的流如果还需要使用, 接着用clear把

c++里面的cin.clear()是什么意思啊?
C++语句cin.clear();中的clear()是什么函数,原型是?答:检举将一个出错的流的状态恢复为“好”。但也不完全是,因为它也可以把“好”的流变成“坏”。其默认参数为:ios::goodbit 故语句:cin.clear()清除cin流,并设置goodbit状态位。同理,语句:cin.clear(ios::failbit)清除cin流,并设置f...

C++中关于cin.clear()的问题
cin.clear()可以理解为清除的意思。当cin的状态被设置为错误状态了,调用cin.clear(istream::failbit)可以清除这个failbit(输入失败)状态复位到初始状态。 一般来说程序中多用if(!cin){cout<<"error";}这样类似的句式来检查输入流,用于保证输入的无误。

C++ cin.ignore(),cin.clear()的讲解
clear是清除错误标志 比如你要输入一个整数int型,但是你输入了一个字符,这时候cin流中就会置一个错误标志,你再输入其他数据都会受到影响,简单的理解,流错了,咋弄都白扯(典型的错误就是你输错之后,如果是循环输入的,后面都不提示你输入了,死循环)clear就是清除这个标记,让你可以继续输入 ...

c++ cin.clear()到底是什么意思呢
当cin函数输入错误的时候,cin里面有个函数可以自动检测到输入错误,若想继续输入便要清楚掉这个错误。可以利用函数cin.rdstate()函数来读取错误的标识符看看。include <iostream>using namespace std;int main(){ int number;cin>>number;cout<<"first input"<<endl;cout<<cin.rdstate()<<endl;cin>>...

c++ cin.getline()的问题
cin.clear()不是用来清空流的。。。是用来清空之前出现的错误flag的 简单的解决方法是在cin>>a;之后加上cin.ignore()来吃掉那个回车。你出现这个问题的原因在于同时使用了两种stream的处理方法——formatted和unformatted。cin>>a是formatted的方法,相当于给你提供了一些方便。但是糅合上使用unformatted的...

C++系统函数中cin.fail()该如何应用?
cout <<"请重新输入:" ;cin.clear(); \/\/修复输入流 cin.ignore(); \/\/取走刚才流中的字符 cin在对整数进行输入的时候,如果输入小数,会把小数的小数点,当做输入整数的结束符。所以不会有问题。可以先用字符串接受,判断字符串中的每个字符,是否是'0'-'9',如果是的话,再转成int就行了。

c++里面cin.clear()的意思
上面的cin默认参数为0,即无错误,正常操作.当我们输入英文字母'k'时,它的状态标识改为fail(即1),即错误,用cout对用户输出信息,再用cin.clear让错误标识改回为0,让我们可以继续输入,再清空流数据继续输入.如果我们没有了cin.clear,则会进入死循环,其过程为我们输入了英文字母,它的状态标识便为fail...

关于C++输入cin的问题,下面的程序,如果输入的不合法,那就将陷入死循环...
然后回车,此时输入缓冲区中就有两个字符,一个是‘a’,一个是回车换行符‘\/n’,接着程序读取,由于类型不匹配,读取失败,并没有读走输入缓冲区中的数据,也就是说,此时输入缓冲区中还是‘a’,和‘\\n’,接着while循环继续读输入缓冲区,依然类型不匹配,于是就成了死循环 ...

c++里面的cin.clear() cin.sync() cin.ignore()这几个函数用法?_百度...
也就是当你使用默认的以回车键为结束时不需指定,系统会默认,写作cin.getline(str,);即可,你写的这个函数有问题,第二个参数是字符串长,字符串长不是第三个参数

c++里cin.clear()重置输入之后,为什么还要用cin.get(),来删除输入...
cin.clear()是删除错误标记,比如goodbit,failbit,eofbit等 cin.get()是从输入流中读取一个字符,所以配合while循环可以删除输入流中的所有字符

相似回答