C++ 中cin错误处理的问题
C++PrimerPlus中197页的一段代码intfill_array(doublear[],intlimit){usingnamespacestd;doubletem...
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;}
是什么意思呢? 展开
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;}
是什么意思呢? 展开
1个回答
展开全部
这么做是因为cin是std::basic_istream的一个实例对象,实例对象就是一个类的实例,简单的说就是用“.”可以引用类公共非静态成员函数的东西。而basic_istream是重载过operator bool操作符的,重载这个操作符的作用是可以返回boolean类型的变量。而basic_istream的operator bool和成员函数good()的意义一样,也就是说
if(!cin)完全等同于if(!cin.good())
这样就明白了吧,也就是good是什么意思呢,就是在io操作没有错误发生,并且io操作有效的时候返回true,有错误发生或者无效的时候返回false,详细可以参考“参考资料”。
if(!cin)完全等同于if(!cin.good())
这样就明白了吧,也就是good是什么意思呢,就是在io操作没有错误发生,并且io操作有效的时候返回true,有错误发生或者无效的时候返回false,详细可以参考“参考资料”。
参考资料: http://en.cppreference.com/w/cpp/io/basic_ios/good
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询