0

我想知道是否有停止输入整数的字母。这是我在 int main 中使用的代码。

do
{
    cout << "Player 1 please enter the value of the row you would like to take ";
    cin >> row;
}while (row != 0 && row != 1 && row != 2 && row != 3);

我对这段代码的问题是,如果用户输入一个字母,它会创建一个永无止境的循环。任何帮助将非常感激。

4

2 回答 2

4

标准库不提供任何可以过滤通过标准输入输入的字符的内容。我相信你可以使用图书馆curses来做到这一点。

但是,您可以做的是检查输入是否成功。operator>>forint会将流的状态设置为failbit如果它无法提取整数(例如,当它遇到一个'a'或类似的东西时。您可以在布尔上下文中使用提取运算符,如下所示:

cout << "Player 1 please enter the value of the row you would like to take ";

while (!(cin >> row) || (row < 0 || row > 3)) {

    cout << "Invalid input, try again!\n";
    // clear the error flags and discard the contents,
    // so we can try again
    cin.clear();
    cin.ignore(std:numeric_limits<std::streamsize>::max(), '\n');
}

请注意,如果您输入 example 1abc,读取将成功读取1并将 留abc在流中。这可能不是理想的行为。如果您希望将其视为错误,您可以说

if ((cin >> std::ws).peek() != EOF) { /* there's more input waiting */ }

并采取相应的行动,或者在获得价值后无条件地忽略流中的所有内容。

于 2013-03-03T11:09:03.943 回答
1

一次获取一个字符,并且只将数字字符添加到字符串中。采用

cin.get();

在一个循环中。

于 2013-03-03T11:08:31.120 回答