等待输入时打印时间

时间:2017-05-02 08:43:28

标签: c

我试图创建一个请求用户输入数字的简单程序,但在上部我显示的是每秒更新一次的时钟。

这是我所知道的

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int a;

int main(void) {
    int a =1;
    while(a)
    {
    system("cls");
    time_t rawtime;
    struct tm*  time_;

    time(&rawtime);
    time_ = localtime(&rawtime);

    printf("%i:%i:%i %i %i %i\n", time_->tm_hour, time_->tm_min, 
            time_->tm_sec, time_->tm_mday, time_->tm_mon+1,
            time_->tm_year+1900);
    printf("Give the input :");
    scanf("%d",&a);
            }
    return 0;
}

我从Program a simple clock in C

获取了打印时间码

我的代码所做的是打印时间然后等待输入,但是在我给出输入之前它不会更新时钟。

有没有可能的方法来做我想要的或搜索解决方案所需的关键字? 对不起,如果我的英语坏了,但如果我说的话不够清楚,只需运行代码:)。

3 个答案:

答案 0 :(得分:0)

您的问题很简单:除非您使用线程,否则您不能等待用户输入并同时执行其他操作。可能你可以做的是等待输入一段时间,打印时间和循环  否则,只要知道使用线程并不是很复杂,但它会显着增加程序的复杂性,其目的似乎仍然很简单。

答案 1 :(得分:0)

你想要的是“非阻塞I / O”。

How do you do non-blocking console I/O on Linux in C?

上述链接问题中有一个答案,其中包含代码段。接受的答案还指出:

  

你几乎不做非阻塞I / O

如果必须,你会

  

通过将控制台I / O放入线程或轻量级进程来简化另一种方式。

剪切的代码非常复杂,根据我的经验,不能保证能够正常工作。

答案 2 :(得分:0)

在等待输入时只有两种显示方式:

  • 使用非阻塞IO并轮询用户输入,同时不断更新显示的时间。使用GUI库或通过非便携式系统调用将很容易 - 遗憾的是不再使用标准的便携式C
  • 使用2个线程,一个用于更新显示,另一个用于用户输入。它自C11以来几乎是可移植的,除了对C线程的支持是可选的。这将导致更复杂的计划

TL / DR:即使看起来很简单(并且确实可以在任何 personnal 计算机的80'中使用基本语言),非阻塞终端IO在C语言中远非简单,因为假设终端只是IO的一个特例。