cin.fail()的错误处理问题

时间:2017-03-01 04:59:31

标签: c++ error-handling char int cin

如果我输入一个角色',为什么这仍然会进入一个无限循环,提示我“”有多少人正在玩? (1-5):“?

int getnumplayers(){
    int num_players =0;
    while(true){
        cout<<"How many people are playing? (1-5): ";
        //cin.ignore();
        cin>>num_players;

        if(cin.fail()){
            cout<<"hello";
        }

        else if((num_players < 6 && num_players > 0)){
            break;  
        }
    }
    return num_players;
}

1 个答案:

答案 0 :(得分:0)

一旦设置了cin.fail(),你需要在cin愿意再读之前用cin.clear()清除它。因此,它正在跳过您的读取请求,因为流不是“好”。

我想你想要一行

cin.clear(cin.rdstate() & ~ios_base::failbit);
cin.ignore();
你的if(cin.fail())块中的