#include "stdafx.h" #include <iostream> const int Max = 5; int _tmain(int argc, _TCHAR* argv[]) { using namespace std; int golf[Max]; cout << "Please enter your golf scores.\n"; cout << "You must enter " << Max << " rounds.\n"; int i; for (i = 0; i < Max; i++) { cout << "round # " << i + 1 << ": "; while (!(cin >> golf[i])) { cin.clear(); while (cin.get() != '\n') continue; cout << " Please enter a number: "; } } double total = 0.0; for (i = 0; i < Max; i++) total += golf[i]; cout << total / Max << " = average score " << Max << "rounds\n"; return 0; }
cin.clear();加上和去掉,有很大的区别,但是我不太能理解,求大神指点。
这是ignore啊,完全没clear的事
@凡图: 都有。这个文档说很清楚了。
ignor是说明对输入内容的忽略策略
clear是清除输入内容引起的错误。
ignorej就像他的名字,忽略,第一个参数是个数,第二个参数是结束符,就是说你一直输入的话,忽略掉前面若干字符,直到遇到结束符为止
像你这个代码,就是说忽略掉前4个,知道遇到回车为止
如果你输入abc,这时你会输入回车,满足了它的遇到结束符的条件,它就不再忽略了,这时你再输入就是a的值了
clear是清除错误标志
比如你要输入一个整数int型,但是你输入了一个字符,这时候cin流中就会置一个错误标志,你再输入其他数据都会受到影响,简单的理解,流错了,咋弄都白扯(典型的错误就是你输错之后,如果是循环输入的,后面都不提示你输入了,死循环)
clear就是清除这个标记,让你可以继续输入
@519740105: =。= 我说没有clear()的例子。。。
@凡图: 其实你的代码里,在我正确输入内容(数值)时,有没有clear没关系。但是,如果我输入字母给数字,有没有clear就有关系了。
其实你代码里的这个作用是刷新缓冲区的,它有没有才是最重要的
1 while (cin.get() != '\n') 2 continue;