我试图创建一个请求用户输入数字的简单程序,但在上部我显示的是每秒更新一次的时钟。
这是我所知道的
#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;
}
获取了打印时间码
我的代码所做的是打印时间然后等待输入,但是在我给出输入之前它不会更新时钟。
有没有可能的方法来做我想要的或搜索解决方案所需的关键字? 对不起,如果我的英语坏了,但如果我说的话不够清楚,只需运行代码:)。
答案 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)
在等待输入时只有两种显示方式:
TL / DR:即使看起来很简单(并且确实可以在任何 personnal 计算机的80'中使用基本语言),非阻塞终端IO在C语言中远非简单,因为假设终端只是IO的一个特例。