为什么不标准:: cin.clear()工作,这个简单的程序?

问题描述 投票:0回答:1

我解决一些练习来打发时间,我遇到了一个问题我不明白,我要解释一下:

锻炼:

编写一个程序,读取和存储一系列整数,然后计算第一N整数的总和。首先,要求N,那么读取的值到载体,然后计算第一N值的总和。

因为我问N作为第二步:

在第二std::cinstd::cin >> values_to_compute)它必须离开while语句继续实施该方案,“只有当”什么是阅读不是双。所以,我可以输入,例如: “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.clear()能够再次使用std::cin

好吧,和?好吧,如果我按Ctrl + Z退出while循环中,std::cin.clear()工程;如果我输入的东西,是不是按Ctrl + Z的std::cin.clear()不起作用。

我想知道这种行为的原因。

c++ iostream
1个回答
2
投票

这是因为std::cin::clear清除cin的错误状态,但它不从流中删除数据。您可以使用std::cin::ignore()阅读和阅读values_to_compute之前丢弃一行文字。

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

确保#include <limits>得到std::numeric_limits

© www.soinside.com 2019 - 2024. All rights reserved.