[英]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.