如何使C语言中的数字时钟工作

如何使C语言中的数字时钟工作,c,C,如果运行此操作,将打开一个数字时钟。它显示小时、分钟和秒,并突出显示当前时间 我现在想要的是让它运行。当添加第二个时间时,突出显示的数字应向右移动一个。很明显 我只是不知道怎么做,有什么可以帮忙的吗 以下是我现在掌握的代码: #include <stdio.h> #include <time.h> #include <conio.h> #include <unistd.h> #include <stdlib.h> #include &l

如果运行此操作,将打开一个数字时钟。它显示小时、分钟和秒,并突出显示当前时间

我现在想要的是让它运行。当添加第二个时间时,突出显示的数字应向右移动一个。很明显

我只是不知道怎么做,有什么可以帮忙的吗

以下是我现在掌握的代码:

#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <unistd.h>
#include <stdlib.h>
#include <windows.h>
#include <math.h>

#define WHITE 15

int main()
{

    int uren, minuten, seconden;
        time_t ltime;
        struct tm *Tm;

        ltime   = time(NULL);
        Tm      = localtime(&ltime);

        uren        = Tm->tm_hour;
        minuten     = Tm->tm_min;
        seconden    = Tm->tm_sec;

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
    printf("Uren:\n");
    int i;
    for (i = 0; i < 24; i++) {
        if(uren == i){
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
            printf("%i ", i);
        }else {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
            printf("%i ", i);
        }

    }

    printf("\n\nMinuten:\n");
    int j;
    for(j = 0; j < 60; j++) {
        if(minuten == j){
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
            printf("%i ", j);
        }else{
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
            printf("%i ", j);
        }
    }

    printf("\n\nSeconden:\n");
    int k;
    for(k = 0; k < 60; k++) {
        if(seconden == k){
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
            printf("%i ", k);
        }else{
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
            printf("%i ", k);
        }
    }

    return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义白色15
int main()
{
国际,分钟,秒;
时间;
struct tm*tm;
ltime=时间(空);
Tm=本地时间(<ime);
uren=Tm->Tm\u小时;
分钟=Tm->Tm\U分钟;
二次=Tm->Tm_秒;
SetConsoleTextAttribute(GetStdHandle(标准输出句柄),15);
printf(“Uren:\n”);
int i;
对于(i=0;i<24;i++){
如果(uren==i){
SetConsoleTextAttribute(GetStdHandle(标准输出句柄),前台红色);
printf(“%i”,i);
}否则{
SetConsoleTextAttribute(GetStdHandle(标准输出句柄),15);
printf(“%i”,i);
}
}
printf(“\n\n分钟:\n”);
int j;
对于(j=0;j<60;j++){
如果(分钟==j){
SetConsoleTextAttribute(GetStdHandle(标准输出句柄),前台红色);
printf(“%i”,j);
}否则{
SetConsoleTextAttribute(GetStdHandle(标准输出句柄),15);
printf(“%i”,j);
}
}
printf(“\n\n压缩:\n”);
int k;
对于(k=0;k<60;k++){
if(seconden==k){
SetConsoleTextAttribute(GetStdHandle(标准输出句柄),前台红色);
printf(“%i”,k);
}否则{
SetConsoleTextAttribute(GetStdHandle(标准输出句柄),15);
printf(“%i”,k);
}
}
返回0;
}

因此,我认为您需要执行三个步骤:

  • 当时间改变时,重复输出
  • 返回屏幕顶部
  • 在这个过程中,不要使用每一盎司的CPU电源 步骤1涉及在整个代码中添加while循环

    第2步涉及使用functon

    第三步涉及调用
    Sleep(250)
    或类似的东西[你不想睡一整秒钟,但要有足够长的时间,这样代码就不会用光所有的CPU,只是为了每毫秒检查一次时间是否发生了变化]。你可能还应该检查当前时间是否与上次相同,然后不要打印它


    我个人也会通过移动
    printf(“%I”,I);
    (等)来简化所有输出在if/else之外——毕竟,两边都是一样的。事实上,我会将一个变量设置为颜色,然后在if之后调用
    SetConsoleTextAttribute
    printf
    ,只需在if/else语句中设置
    color=WHITE
    color=RED

    你不能放一个大的while(true)'围绕它,清除屏幕,然后再次打印时间?通过休眠线程1秒结束循环(谷歌it)你使用
    #定义白色15
    ,然后在代码中仍然使用
    15
    。@蟾蜍他可以这么做,但在我看来,一定有更好的方法,就像用猎枪杀死苍蝇一样,但也有更好的方法。你在问如何更新终端中的文本?@mah对于技能水平,这似乎是最简单的方法了解解决方案。看起来Mats同意我的观点;^)我现在就开始讲,因为我的C语言还不太好,这需要一些时间。谢谢你的努力!事实上这不是最好的解决方案,你知道有什么方法可以在短时间内做到这一点吗?