0

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

我现在想要的是让它运行。添加一秒钟后,突出显示的数字应向右移动一个。明显地。

我只是不知道如何做到这一点,请帮助?

这是我现在拥有的代码:

#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;
}
4

1 回答 1

2

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

  1. 当时间改变时重复输出。
  2. 返回屏幕顶部。
  3. 在此过程中不要使用每一盎司的 CPU 能力。

第 1 步涉及在整个代码周围添加一个 while 循环。

第 2 步涉及使用SetConsoleCursorPosition函数。

第 3 步涉及调用Sleep(250)或类似的事情[你不想睡一整秒,但足够长的时间,代码不会用完所有的 CPU,只是为了检查时间是否改变了每毫秒)。您可能还应该检查当前时间是否与上次相同,然后不打印。

我个人也会通过将printf("%i", i);(等)移出 if/else 来简化所有输出 - 毕竟,双方都是一样的。事实上,我将一个变量设置为颜色,然后在 if/else 语句中同时调用ifSetConsoleTextAttributeprintf之后,只需在 if/else 语句中设置colour = WHITEor即可。colour = RED

于 2013-02-13T12:46:15.063 回答