簡體   English   中英

為什么std :: cin.clear()在這個簡單程序中不起作用?

[英]Why doesn't std::cin.clear() work in this simple program?

我正在解決一些打發時間的練習,遇到一種我不了解的行為,我將解釋:

練習:

編寫一個程序,該程序讀取並存儲一系列整數,然后計算前N整數的和。 首先,要求N ,然后將值讀入向量,然后計算前N值的總和。

由於我要求N作為第二步:

在第二個std::cinstd::cin >> values_to_compute )中,它必須離開while語句才能繼續執行程序,“只有在讀取的內容不是雙std::cin >> values_to_compute才可能。 例如,我可以輸入; “ k”或“你好嗎?” 或Ctrl + Z鍵(我在Windows 10上)。

int main() {
    try {
        double holder {0};
        std::vector<double> values;
        while (std::cin >> holder) {
            values.push_back(holder);
        }
        std::cin.clear();
        std::cout << "Out of the loop, now entering to the other std::cin\n";
        int values_to_compute {0};
        std::cin >> values_to_compute;
        std::cout << "Computing...\n";
        double result_computed {0};
        for (int i {0}; i < values_to_compute; ++i) {
            result_computed += values[i];
        }
        std::cout << "Result computed " << result_computed << '\n';

        system("pause");
        return 0;
    }
    catch (std::runtime_error& e) {
        std::cerr << e.what() << '\n';

        system("pause");
        return 1;
    }
}

好吧 所以... std::cin使那一會兒處於std::cin好的狀態。 我必須調用std::cin.clear()才能再次使用std::cin

好嗎 好吧,如果我按Ctrl + Z退出while循環,則std::cin.clear()可以工作; 如果我輸入的不是Ctrl + Z,std::cin.clear()不起作用。

我想知道為什么這樣做。

這是因為std::cin::clear清除的錯誤狀態cin ,但它從流中刪除數據。 在讀取values_to_compute之前,可以使用std::cin::ignore()讀取和丟棄一行文本。

std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

確保#include <limits>以獲得std::numeric_limits

暫無
暫無

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

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