標準庫不提供任何可以過濾通過標準輸入輸入的字符的內容。我相信你可以使用像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