c - 让 C 在继续执行脚本之前等待用户输入一段有限的时间

标签 c windows winapi

我目前正在编写一个小程序,它需要一段代码,该代码将等待 x 秒以查看用户是否输入任何内容,如果没有给出输入,则继续执行更多代码。这样的事情也可以包含在 for 循环中,这样一旦执行了进一步的代码,它就会等待有限的时间段再次输入。如果通过按键给出输入,则代码将继续执行进一步但不同的代码。 最初我尝试使用 while 来解决这个问题循环,<time.h>clock()scanf()但无济于事。 我最近的尝试有所不同,但仍然没有产生预期的结果。 我最新的代码如下:

int c;
char check[10];
    for(c=0;c<1000;++c){
        //do something
            int end=time(0)+(1);
            while(time(0)<end){
                fgets(check,10,stdin);
                if(*check=='\n'){
                break;
                }
            }
        //do the other stuff
        if(*check!='\n'){
            break;
        }
    }
    //even more stuff

我已经在脚本顶部声明了所有相关的头文件,但现在对如何继续感到困惑,而且我正在使用 Windows。任何帮助,将不胜感激。

非常感谢

最佳答案

您必须使用带有超时的 select,然后执行 IO。 起点可以是:

#include <sys/select.h>
#include <stdio.h>

int main(void) {
    char buf[100];
    fd_set rfds;
    int r;

    FD_ZERO(&rfds);
    FD_SET(0, &rfds);
    struct timeval timeout;
    timeout.tv_sec = 3;
    timeout.tv_usec = 0;
    r = select(1, &rfds, NULL, NULL, &timeout);
    if(r == 0)
        printf("timeout!\n");
    else {
        fgets(buf, 100, stdin);
        printf("==> %s\n", buf);
    }
}

关于c - 让 C 在继续执行脚本之前等待用户输入一段有限的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41061571/

相关文章:

c++ - 什么 API 会启动 FTP 传输并向 GUI 报告状态?

windows - 防止锁定窗口检测用户空闲时间

c++ - static_cast 和 reinterpret_cast 效果一样的时候用哪个?

windows - Webusb:尝试在 Windows 上打开打印机时访问被拒绝

c++ - 为什么我可以在没有调用 CoInitializeEx 的情况下调用 StringFromCLSID?

c - 如何绘制分隔符?

c - fork 重复两次?

c - 初始化 Valgrind 错误

c - 批处理文件中设置的环境变量无法在该文件编译的C代码中访问

c - 在 C 中使用 char 减去十六进制值