我在编写一个控制台应用程序时遇到了这个问题,在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时立即关闭程序(不抛出无效的参数异常)。