[英]Terminating scanf programmatically in C language
我正在Linux操作系統上使用C語言進行編程。 我正在寫一個程序來掃描用戶的輸入。 但是,我希望scanf有一定的時間限制。 例如,如果用戶在10秒鍾內未在鍵盤上輸入任何內容,它將跳過scanf並轉到下一行。 我正在使用alarm(10)等待10秒,但是當我轉到alarmhandler時,我不知道該如何跳過scanf。
是否有跳過scanf或例如將\\ n寫入輸入緩沖區的功能?
從警報處理程序返回; scanf的返回值應反映出發生了錯誤情況。 (scanf在出錯時返回EOF)。
注意! 您必須使用sigaction
,因為signal
可能會使read()
成為基礎可重啟動的scanf()
系統調用。
#include <stdio.h>
#include <signal.h>
void handler(int signo)
{
return;
}
int main()
{
int x;
struct sigaction sa;
sa.sa_handler = handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sigaction(SIGALRM, &sa, NULL);
alarm(5);
if (scanf("%d", &x) == 1)
{
printf("%d\n", x);
alarm(0); // cancel the alarm
}
else
{
printf("timedout\n");
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.