我必須在while循環中從用戶處獲得輸入,然後採取一些措施。而且我也想在ctrl + c輸入中退出我的代碼。使用scanf循環處理SIGINT
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);' –