簡體   English   中英

涉及“cin.fail()”多次運行的循環

[英]loop involving "cin.fail()" running multiple times

我在使用以下代碼時遇到問題。 這意味着一直要求輸入有效,直到輸入 integer 或雙精度。 它適用於字符,但是當我輸入長度超過 1 的字符串時,它將多次運行循環。 例如,輸入“hello”導致“請輸入有效數字”被打印 5 次。 有趣的是,“h llo”只會打印該句子 4 次。

int gamenumber;

while(true)
{
    cin >> gamenumber;
    
    if(cin.fail())
    {
        cout << "Please enter a valid number" << endl;
        cin.clear();
        cin.ignore();
        
    } else
        break;

我確實設法通過將“cin.ignore()”替換為“cin.ignore(1000, '\n')”來解決這個問題。

但無論如何,我不明白為什么單獨使用“cin.ignore()”不能解決這個問題,這讓我很煩惱? 有沒有辦法在不使用“cin.ignore(1000, '\n')”的情況下修復上述代碼? (這是家庭作業的一部分,我們可能不允許使用“cin.ignore(1000, '\n')”)

謝謝!

您需要對重載的使用ignore ,請在此處查看此分析器。

或者您可以只需要運行getline排空內容,但這種方式速度較慢且不必要。

#include <iostream>
#include <string>
 
int main()
{
    double n;
    while( std::cout << "Please, enter a number\n"
           && ! (std::cin >> n) )
    {
        std::cin.clear();
        std::string line;
        std::getline(std::cin, line);
        std::cout << "I am sorry, but '" << line << "' is not a number\n";
    }
    std::cout << "Thank you for entering the number " << n << '\n';
}

暫無
暫無

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

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