我正在尝试做一个循环,检查输入是否是一个数字,如果没有再次询问

I am trying to make a loop that will check if input is a number and if not ask again

本文关键字:一个 如果没有 数字 是否是 输入 检查 循环      更新时间:2023-10-16

这是我迄今为止的代码。我尝试了一些像isDigit(nPlay)和!cin。也许我需要一个不同的循环。当我做任何一个时,如果我输入的数字超过4,它的行为就像是应该的一样。但当我输入一个字母或单词时,它就会进入一个无限循环。

int view::numPlayer() {
int nPlay = 0;
while( nPlay == 0 ) {
    cout << "How many players will there be?" << endl;
    cin >> nPlay;
    if(nPlay > 4 || nPlay < 2 || !cin) {
        nPlay = 0;
    }
    system("CLS");
}
return nPlay;

这是因为std::cin上的failbit标志在设置时不会自动清除。这意味着!cin将始终为真。您必须使用clear()功能手动清除标志。

与其尝试读取一个整数,如果失败,则清除流的故障位,不如读取一个字符串,如果转换不成功,则重复此操作。

int value;
char *pos;
std::string temp;
cout << "How many players will there be?";
do {
    std::getline(cin, temp);
    nPlay = strtol(temp.c_str(), &pos, 10);
} while (*pos != '');
相关文章: