簡體   English   中英

您可以停止輸入整數的字母嗎?

[英]Can you stop letters being entered for an integer?

我想知道是否無論如何都停止輸入整數。 這是我在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庫來做到這一點。

但是,您可以做的是檢查輸入是否成功。 如果無法提取整數(例如,當遇到'a'東西)時, int operator>>會將流的狀態設置為failbit 。您可以在布爾上下文中使用提取運算符,如下所示:

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 ,則讀取將成功讀取1並將abc留在流中。 這可能不是理想的行為。 如果您希望將其視為錯誤,可以說

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

並采取相應的措施,或者一旦獲得價值就無條件忽略流中的所有內容。

一次獲取一個字符,僅將數字字符添加到字符串中。 采用

cin.get();

在一個循環中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM