Ctrl在通过+发送 SIGINT 后,该程序将无限打印“Enter a:”到命令行C。要退出此循环,我使用Ctrl+ \。如果我取消注释包含 的行std::cin.clear();
,一切正常。我的问题是,这是正确的做法吗?必须std::cin.clear();
在他希望程序等待的每个 cin/cout 前面设置。这就是为什么这对我来说似乎不是正确的方式。
#include<iostream>
#include<signal.h>
void sig_handler(int s)
{
std::cout << "Cought: " << s << std::endl;
// do something...
}
int main ()
{
struct sigaction sigIntHandler;
sigIntHandler.sa_handler = sig_handler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;
sigaction(SIGINT, &sigIntHandler, NULL);
int a=1;
while(a)
{
std::cout << "Enter a:" << std::endl;
//std::cin.clear(); // Uncomment me!
std::cin >> a;
}
}
PS:我知道信号处理程序中的 cout 是个坏主意。
PPS:std::cin.clear();
当我使用旧的 (deprecated) 时,一切正常(没有)signal()
。
PPPS:只是为了说清楚,我不想在Ctrl+上退出程序C!