c - 等待输入时打印时间

标签 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中取出打印时间码

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

是否有任何可能的方法来做我想做的事情或者我需要什么关键字来搜索解决方案? 如果我的英语不好,我很抱歉,但如果我说的不够清楚,请运行代码:)。

最佳答案

只有两种方式可以在等待输入时显示一些东西:

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

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

关于c - 等待输入时打印时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43733616/

相关文章:

c - 包含在内联汇编中

java - 在main方法处执行

c - Ncurses - 多窗口和刷新

c++ - UDP sendto() 和 recvfrom() 最大缓冲区大小

c - 打开/关闭文本文件以每 0.01 秒写入一次是正确的选择吗?

c - flock() 的范围是什么?

c++ - 自定义预编译头导致编译错误

c - 如何使用 CMake 链接到 C 数学库?

c - 如何识别和定位数组中的大值?

c - 我的 C 程序自行输出