【发布时间】:2016-06-28 07:32:32
【问题描述】:
我必须在 while 循环中接受用户的输入,然后采取一些行动。而且我还想在 ctrl+c 输入时退出我的代码。
void my_signal_handler(int sig)
{
running = false;
signal(sig, SIG_IGN);
}
int main(void)
{
struct sigaction sa = {{0}};
sa.sa_handler = &my_signal_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
if (sigaction(SIGINT, &sa, NULL) != 0)
{
fprintf(stderr, "sigaction error\n");
return -1;
}
while(running)
{
printf("enter number: ");
scanf("%d", &num);
// take action based on number
}
}
此代码的问题是在按下 ctrl+c 后,它不会退出,但它会等待 scanf 的输入。因此,一旦我按下一个额外的键,程序就会退出(调用信号处理程序)。
按 ctrl+c 后如何删除向 scanf 提供输入的额外步骤?
【问题讨论】:
-
您能否通过激励来改进您的问题(所以请编辑您的问题),好吗?
-
顺便说一句,给定的代码无法编译。
scanf(%d", &num);中缺少双引号