C++ 中cin错误处理的问题

C++ Primer Plus 中197页的一段代码
int fill_array (double ar[], int limit)
{
using namespace std;
double temp;
int i;
for (i = 0; i < limit; i++)
{
cout << "Enter value #" << (i + 1) << ": ";
cin >> temp;
if (!cin)
{
cin.clear();
while (cin.get() != '\n')
continue;
cout << "Bad input; input process terminated.\n";
break;
}
else if (temp < 0)
break;
ar[i] = temp;
}
return i;
}
不明白if语句块中错误输入处理的意思,能帮忙解释一下吗?
!cin具体是指哪几种情况,还有while一块的功能是怎么样的?
那请问
while (cin.get() != '\n')
{continue;}
是什么意思呢?

这么做是因为cin是std::basic_istream的一个实例对象,实例对象就是一个类的实例,简单的说就是用“.”可以引用类公共非静态成员函数的东西。而basic_istream是重载过operator bool操作符的,重载这个操作符的作用是可以返回boolean类型的变量。而basic_istream的operator bool和成员函数good()的意义一样,也就是说

if(!cin)完全等同于if(!cin.good())

这样就明白了吧,也就是good是什么意思呢,就是在io操作没有错误发生,并且io操作有效的时候返回true,有错误发生或者无效的时候返回false,详细可以参考“参考资料”。

参考资料:http://en.cppreference.com/w/cpp/io/basic_ios/good

温馨提示:内容为网友见解,仅供参考
无其他回答

c++中cin类型不匹配的问题
退出循环

C ++ cin>>报错
我觉得你没有搞清楚C和C++的区别,特别是没有搞清楚struct在C和C++中的区别,你写的是“披着C++外皮”的C代码,所以运行出错。1.结构体定义作如下修改:struct LinkList{ string ID; string name; double score[3]; double average; LinkList *next;};2.把所有的=(Linklist *)m...

C++中cin读入错误数据时,结果为何为0
什么叫结果为0,你是指cin>>c这样逻辑为false吧,这是因为cin的flag置位了,而且>>操作符返回的是对cin的引用,这时如果要继续使用cin,需要clear它的状态,并丢掉流中错误的数据。

关于C++输入cin的问题,下面的程序,如果输入的不合法,那就将陷入死循环...
当你在控制台输完数据敲回车后,输入的数据以及回车换行符被同时送到输入缓冲区,例如你输入的数据为a,然后回车,此时输入缓冲区中就有两个字符,一个是‘a’,一个是回车换行符‘\/n’,接着程序读取,由于类型不匹配,读取失败,并没有读走输入缓冲区中的数据,也就是说,此时输入缓冲区中还是‘...

c++里面cin的问题
错误标志, 用来检查cin的状态.比如说 int val;cin >> val; \/\/ 假设你输了一个字母进去, 那么failbit就会被设立.if(cin.fail()) \/\/ 检查cin的状态 cout << "输入失败" << endl;

C++中cin状态问题
你回车之后再按终止符号 ,就可以直接终止。我估计是这个终止符号的前面不能有其他符号。不然会单独作为一个字符处理。

在C++中:int a; cin>>a>>endl;想知道该语句错误的原因?
cin里不能放endl,另起一行,用cout

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

c++中cin问题
输入1.25 现在缓冲区里面有[1.25]先是cin>>a; cin>>int:读取输入直到非数字字符 所以读到.的时候停止了 即a=1 输入缓冲区里面现在有[.25]在cin>>b; cin>>double 读取直到非数字和小数点 cin>>.25 所以b=0.25;

c++语言的cin问题
if (cin&&j==8)是判断输入流是否有效,如果输入流有效并且 j 等于 8,就退出循环。什么时候 cin 流会变为无效?如果你输入非整型值,比如字母,那么输入流就会变为无效。

相似回答