我想知道是否有停止输入整数的字母。这是我在 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);
我对这段代码的问题是,如果用户输入一个字母,它会创建一个永无止境的循环。任何帮助将非常感激。
我想知道是否有停止输入整数的字母。这是我在 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);
我对这段代码的问题是,如果用户输入一个字母,它会创建一个永无止境的循环。任何帮助将非常感激。
标准库不提供任何可以过滤通过标准输入输入的字符的内容。我相信你可以使用图书馆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 */ }
并采取相应的行动,或者在获得价值后无条件地忽略流中的所有内容。
一次获取一个字符,并且只将数字字符添加到字符串中。采用
cin.get();
在一个循环中。