为什么在Ctrl + C冻结控制台后抛出异常?

时间:2017-11-26 23:44:08

标签: c++ windows c++11 cmd mingw

我在编写一个控制台应用程序时遇到了这个问题,在C ++ 11中使用输入解析进行学校作业。

我在Windows 10上使用MinGW编译器。当我从cmd运行此程序并按Ctrl + C时,命令行冻结,保持进程运行,不响应控制台输入。< / p>

最小,完整和(可验证?)示例

#include <iostream>
#include <string>
#include <sstream>
#include <stdexcept>

int main()
{
    std::string line;
    getline(std::cin, line);

    if (!std::cin.good()) {
        std::ostringstream message;
        message << "Unexpected input stream state \"" << std::cin.rdstate() << "\".";
        throw std::invalid_argument(message.str());
    }

    return 0;
}

它已经工作了一次或两次 1 ,但我无法重现它,因为它第二次运行它时打破了它(没有重新编译或改变任何东西)。我不确定是否有人可以重现这个问题。

如果我删除throw,则可以。

此外,如果我在cout之后输出getline的文字,也可以。

为什么会这样?

1 工作 - 预期的行为是在按Ctrl + C时立即关闭程序(不抛出无效的参数异常)。

0 个答案:

没有答案