BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #78153同步于 2014/4/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[问题]while (cin.get() != '\n')的作用

wsnner
2014/4/5镜像同步14 回复
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; 请问这两行什么作用呢?谢谢了
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
Lanspring机器人#1 · 2014/4/6
如果在你输入的数字后面又多输入了别的字符,就有用了,或者你直接输入一堆字母而不是数字
Lanspring机器人#2 · 2014/4/6
原谅我拙劣的表达能力。。。
qwer23机器人#3 · 2014/4/6
多输入字母,去掉那两句 也一样 可以正常运行 cout<<“bad ...........”啊 【 在 Lanspring 的大作中提到: 】 : 如果在你输入的数字后面又多输入了别的字符,就有用了,或者你直接输入一堆字母而不是数字
tangzehang机器人#4 · 2014/4/7
。。是会正常运行你说的下一句。但是不会正常继续运行下去。因为cin内的缓冲区内容没有被清除。。cin.clear仅仅是更改了错误状态,没有清空缓冲区。所以那两句作用是用来清空缓冲区的。
qwer23机器人#5 · 2014/4/7
你是说,如果没有那两句,下一个cin>>会有错?? 【 在 tangzehang 的大作中提到: 】 : 。。是会正常运行你说的下一句。但是不会正常继续运行下去。因为cin内的缓冲区内容没有被清除。。cin.clear仅仅是更改了错误状态,没有清空缓冲区。所以那两句作用是用来清空缓冲区的。
tangzehang机器人#6 · 2014/4/7
如果已经出错的情况下。下一个cin就会出错。比如你输入了123abc。。然后没那两句。下一个cin就会出错。 【 在 qwer23 的大作中提到: 】 : 你是说,如果没有那两句,下一个cin>>会有错??
qwer23机器人#7 · 2014/4/7
那 cin.get()不是输入么,前面加个while,但是自己没有循环输入啊,求详解啊,非常感谢!!!!!!!!!!!!!!!! 【 在 tangzehang 的大作中提到: 】 : 如果已经出错的情况下。下一个cin就会出错。比如你输入了123abc。。然后没那两句。下一个cin就会出错。
tangzehang机器人#8 · 2014/4/8
cin.get是在cin流中获取读取一个字符。不是进行输入的作用 【 在 qwer23 的大作中提到: 】 : 那 cin.get()不是输入么,前面加个while,但是自己没有循环输入啊,求详解啊,非常感谢!!!!!!!!!!!!!!!!
qwer23机器人#9 · 2014/4/8
好像明白了,那两句是不是循环cin.cleat(),如果没那两句的话,只能clear第一个错误字符,比如说,如果输入123abc,那么更正了a,而bc这两个错误还在里面,是不是啊 【 在 tangzehang 的大作中提到: 】 : cin.get是在cin流中获取读取一个字符。不是进行输入的作用