注册 登录
编程论坛 C++教室

关于cin.clear()

最近不在 发布于 2010-03-08 17:30, 1132 次点击
程序代码:
#include<iostream>
using namespace std;
const int max=5;
int main()
{
    int golf[max];
    cout<<"please input 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 input a number:\n";
            cout<<"round #"<<i+1<<":";
        }
    }
    return 0;
}
2 回复
#2
quietstar2010-03-08 18:20
cin.clear()是重置输出流状态,可以带参数:ios::goodbit、ios::failbit等等,默认参数为ios::goodbit,最常用的也是这个。在你的程序中,如果输入非数字,由于cin>>golf[i]为假,输入的数据不被接受,滞留在缓冲区中,同时导致输出流状态为假,所以必须使用cin.clear()重置输出流状态才能继续接受输入,同时建议再加上cin.sync()清空输入流,保证数据准确。
#3
夏帅2010-03-08 19:05
谢谢1楼
1