首页 新闻 会员 周边 捐助

C++的cin.clear();

0
悬赏园豆:5 [已解决问题] 解决于 2014-10-08 11:29
#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();加上和去掉,有很大的区别,但是我不太能理解,求大神指点。

C++
CTRA王大大的主页 CTRA王大大 | 初学一级 | 园豆:30
提问于:2014-09-12 11:24
< >
分享
最佳答案
0
收获园豆:5
519740105 | 大侠五级 |园豆:5810 | 2014-09-12 19:37

这是ignore啊,完全没clear的事

CTRA王大大 | 园豆:30 (初学一级) | 2014-09-15 09:13

@凡图: 都有。这个文档说很清楚了。

ignor是说明对输入内容的忽略策略

clear是清除输入内容引起的错误。

 

ignorej就像他的名字,忽略,第一个参数是个数,第二个参数是结束符,就是说你一直输入的话,忽略掉前面若干字符,直到遇到结束符为止
像你这个代码,就是说忽略掉前4个,知道遇到回车为止
如果你输入abc,这时你会输入回车,满足了它的遇到结束符的条件,它就不再忽略了,这时你再输入就是a的值了

clear是清除错误标志
比如你要输入一个整数int型,但是你输入了一个字符,这时候cin流中就会置一个错误标志,你再输入其他数据都会受到影响,简单的理解,流错了,咋弄都白扯(典型的错误就是你输错之后,如果是循环输入的,后面都不提示你输入了,死循环)
clear就是清除这个标记,让你可以继续输入 

519740105 | 园豆:5810 (大侠五级) | 2014-09-15 09:27

@519740105: =。=  我说没有clear()的例子。。。

CTRA王大大 | 园豆:30 (初学一级) | 2014-09-15 09:29

@凡图: 其实你的代码里,在我正确输入内容(数值)时,有没有clear没关系。但是,如果我输入字母给数字,有没有clear就有关系了。

519740105 | 园豆:5810 (大侠五级) | 2014-09-15 09:52
其他回答(1)
0

其实你代码里的这个作用是刷新缓冲区的,它有没有才是最重要的

1  while (cin.get() != '\n')
2                 continue;
venoral | 园豆:199 (初学一级) | 2018-04-15 15:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册