用户输入只需等待5秒钟

use*_*121 4 c

我想在turbo c ++ 4.5编辑器中编写一个简单的c程序,这样用户输入只需要等待5秒钟.举个例子,

#include <stdio.h>

void main()
{
  int value = 0;
  printf("Enter a non-zero number: ");

  // wait only 5 seconds for user input
  scanf("%d",&value);
  if(value != 0) {
    printf("User input a number");
  } else {
    printf("User dont give input");
  }
}
Run Code Online (Sandbox Code Playgroud)

那么,5秒的代码将等待'scanf'功能,否则执行if-else部分.

mir*_*los 9

尝试选择(2)循环:http://www.mirbsd.org/man2/select on stdin(fd#0),超时为5秒; 仅当select返回表示存在数据时才运行scanf(3).(有关示例,请参阅mksh源代码中的c_read()函数.)

其他功能,如poll(2),也是可能的.非阻塞I/O有点矫枉过正.

好的,这是一个使用select的工作(在MirBSD上)示例:

#include <sys/types.h>
#include <sys/time.h>
#include <err.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int
main(void)
{
    int value = 0;
    struct timeval tmo;
    fd_set readfds;

    printf("Enter a non-zero number: ");
    fflush(stdout);

    /* wait only 5 seconds for user input */
    FD_ZERO(&readfds);
    FD_SET(0, &readfds);
    tmo.tv_sec = 5;
    tmo.tv_usec = 0;

    switch (select(1, &readfds, NULL, NULL, &tmo)) {
    case -1:
        err(1, "select");
        break;
    case 0:
        printf("User dont give input");
        return (1);
    }

    scanf("%d", &value);
    if (value != 0) {
        printf("User input a number");
    } else {
        printf("User dont give input");
    }
    return (0);
}
Run Code Online (Sandbox Code Playgroud)

您可能希望稍微使用退出代码,并在整个代码中添加一些\n \n.在fflush(stdout);使首先显示的提示是非常重要的...