簡體   English   中英

我應該如何使用 c++ 處理“std::cerr”和“std::cin.fail()”?

[英]How should I do with “std::cerr” and “std::cin.fail()” using c++?

你能幫我解決這個小問題嗎?

問題:程序應該返回一個錯誤代碼(1)並打印這個確切的字符串以防遇到故障:“遇到錯誤,退出......”

我的代碼:

#include <iostream>
#include <random>

int main(int argc, char const *argv[])
{

    int number, random;
    random = (std::rand() % 100);

    while (std::cin >> number)
    {
        if (number < random && number >= 0)
        {
            std::cout << "This number is larger." << std::endl;
        }
        else if (number > random && number <= 99)
        {
            std::cout << "This number is smaller." << std::endl;
        }
        else if (std::cin.fail())
        {
            std::cout << "Error encountered, exiting..." << std::endl;
        }
        else if (number < 0 || number > 99)
        {
            std::cout << "[WARNING] : Number must be between 0 and 99" << std::endl;
        }

        else if (number == random)
        {
            std::cout << "Great! You're right!" << std::endl;
            break;
        }
    };

    return 0;
}

編譯后,我將輸入例如'write'。 我的編程就直接寫完了。 我的終端中沒有出現“遇到錯誤,正在退出...”。 你能給一些關於std::cin.fail()建議嗎? 我應該怎么做? 我也不明白,我可以在這里使用std::cerr更改std::cout嗎? std::coutstd::cerr之間的最大區別是什么?

非常感謝

此致

您應該在while循環之后測試std::cin.fail() ,因為如果std::cin >> number失敗,則不會進入while循環的主體。

您還可以稍微重組測試,以不必一遍又一遍地執行相同的測試。 此外, std::endl會刷新 output stream,這在絕大多數情況下是不必要的,只是需要額外的時間。

    // ...
    while (std::cin >> number)
    {
        if (number < 0 || number > 99)
        {
            std::cout << "[WARNING] : Number must be between 0 and 99\n";
        }
        else if (number < random) // no need to test if it's out of bounds
        {
            std::cout << "This number is larger.\n";
        }
        else if (number > random) // no need to test if it's out of bounds
        {
            std::cout << "This number is smaller.\n";
        }
        else                       // no need to test anything
        {
            std::cout << "Great! You're right!\n";
            break;
        }
    }
    if(std::cin.fail())
    {
        std::cout << "Error encountered, exiting...\n";
        return 1;
    }
    return 0;
}

std::coutstd::cerr之間的區別在於它將使用哪個 output stream 。 例如,如果運行您的程序的人想要記錄錯誤,他們可以分別讀取這兩個流。

暫無
暫無

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

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