簡體   English   中英

cin.fail 在 do while 中沒有按預期工作

[英]cin.fail not working as expected in do while

為什么這段代碼在正確的整數輸入上運行兩次? 在第一個輸入整數時,它再次要求輸入,然后在正確的輸入上退出。 是否與cin的范圍有關?

#include <iostream>
using namespace std;

int main()
{
    int q1 = 1;
    do
    {
        cin.clear();
        cin.ignore();
        cin >> q1;
    }
    while(cin.fail());
    return 0;
}

在第一次迭代中, cin.ignore(); 意味着第一個字符將被忽略。 使用調試器cin.ignore()會向您cin.ignore()實際上會阻塞,直到您提供輸入。 如果您的輸入是一位數int ,則該值將被忽略。 然后, std::cin會等到你給出另一個值。 在這種情況下,循環只執行一次,但您必須提供兩個值,因此看起來它執行了兩次。

解決方案是僅在出現錯誤時才忽略。 您也應該使用cin.ignore(std::numeric_limits<std::streamsize>::max(), '\\n');忽略整個輸入行cin.ignore(std::numeric_limits<std::streamsize>::max(), '\\n'); 而不是僅僅ignore單個字符。 請嘗試以下操作:

#include <ios>
#include <iostream>
#include <limits>

int main()
{
    int q1 = 1;
    std::cin >> q1;
    while (std::cin.fail()){
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cin >> q1;
    }
    std::cout << q1;
    return 0;
}

暫無
暫無

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

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