标准库不提供任何可以过滤通过标准输入输入的字符的内容。我相信你可以使用像curses
这样的库来做到这一点。
但是你可以做的是检查输入是否成功。 operator>>
为int
将流的状态设置为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');
}
请注意,如果您例如1abc
输入,读取将succesfuly阅读1
和流中离开abc
,这可能不是一个期望的行为。如果你希望把它看成一个错误,你可以说
if ((cin >> std::ws).peek() != EOF) { /* there's more input waiting */ }
并采取相应的行动,或者只有在您有价值时,无条件地忽略流中的所有内容。
这个作业是否有像“只使用我们已经学过的标准C++东西”的约束?如果这是更“真实的”,那么有很多选择,这取决于操作系统和许可问题。 – hyde 2013-03-03 11:27:23