返回信息流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) // bad input
{
cin.clear();
while (cin.get() != '\n')
continue;
cout << "Bad input; input process terminated.\n";
break;
}
else if (temp < 0) // signal to terminate
break;
ar[i] = temp;
}
return i;
}
如程序所示,我将下面两行注释掉依然可以正确运行
while (cin.get() != '\n')
continue;
请问这两行什么作用呢?谢谢了
这是一条镜像帖。来源:北邮人论坛 / cpp / #78153同步于 2014/4/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[问题]while (cin.get() != '\n')的作用
wsnner
2014/4/5镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
多输入字母,去掉那两句 也一样 可以正常运行 cout<<“bad ...........”啊
【 在 Lanspring 的大作中提到: 】
: 如果在你输入的数字后面又多输入了别的字符,就有用了,或者你直接输入一堆字母而不是数字
。。是会正常运行你说的下一句。但是不会正常继续运行下去。因为cin内的缓冲区内容没有被清除。。cin.clear仅仅是更改了错误状态,没有清空缓冲区。所以那两句作用是用来清空缓冲区的。
你是说,如果没有那两句,下一个cin>>会有错??
【 在 tangzehang 的大作中提到: 】
: 。。是会正常运行你说的下一句。但是不会正常继续运行下去。因为cin内的缓冲区内容没有被清除。。cin.clear仅仅是更改了错误状态,没有清空缓冲区。所以那两句作用是用来清空缓冲区的。
如果已经出错的情况下。下一个cin就会出错。比如你输入了123abc。。然后没那两句。下一个cin就会出错。
【 在 qwer23 的大作中提到: 】
: 你是说,如果没有那两句,下一个cin>>会有错??
那 cin.get()不是输入么,前面加个while,但是自己没有循环输入啊,求详解啊,非常感谢!!!!!!!!!!!!!!!!
【 在 tangzehang 的大作中提到: 】
: 如果已经出错的情况下。下一个cin就会出错。比如你输入了123abc。。然后没那两句。下一个cin就会出错。
cin.get是在cin流中获取读取一个字符。不是进行输入的作用
【 在 qwer23 的大作中提到: 】
: 那 cin.get()不是输入么,前面加个while,但是自己没有循环输入啊,求详解啊,非常感谢!!!!!!!!!!!!!!!!
好像明白了,那两句是不是循环cin.cleat(),如果没那两句的话,只能clear第一个错误字符,比如说,如果输入123abc,那么更正了a,而bc这两个错误还在里面,是不是啊
【 在 tangzehang 的大作中提到: 】
: cin.get是在cin流中获取读取一个字符。不是进行输入的作用