如何在不停止程序C语言的情况下使用scanf?

时间:2019-09-28 02:30:54

标签: c input counter

我正在做一个计数器,在该计数器中显示用户必须输入多少秒。问题是,当我使用scanf()时,程序将停止并等待答案,但我不希望这样。我想让计数器继续运行,即使用户没有放置任何东西。

示例:

for(int i=10;i>=0;i--){
            i==0? printf("time over\n"):printf("%d seconds left\n",i);
            scanf("%s", decision);
            sleep(1);
        }

我该怎么解决?

1 个答案:

答案 0 :(得分:2)

就像评论中提到的那样,一种可能性是使用民意测验。

man poll说:

  

poll()检查一组文件描述符,以查看其中一些是否   准备进行I / O或发生某些事件。

在代码中,它可能看起来像这样:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/poll.h>
#include <stdbool.h>

int main() {
    struct pollfd fds[1];
    fds[0].fd = STDIN_FILENO;
    fds[0].events = POLLIN;

    bool dataAvailable = false;
    for (int i = 10; i >= 0 && !dataAvailable; i--) {
        switch (poll(fds, 1, 1000)) {
            case -1:
                perror("poll failed");
                exit(1);
            case 0:
                printf("%d seconds left\n", i);
                break;
            default:
                dataAvailable = true;
        }
    }

    if (dataAvailable) {
        //read from stdin
    } else {
        fprintf(stderr, "no input\n");
        exit(1);
    }

    return 0;
}