如何在C工作中制作数字时钟

时间:2013-02-13 12:16:26

标签: c

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

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

我只是不知道该怎么做,请帮忙吗?

以下是我现在的代码:

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

1 个答案:

答案 0 :(得分:2)

所以,有三个步骤,我认为你想要这样做:

  1. 时间变化时重复输出。
  2. 返回屏幕顶部。
  3. 在此过程中不使用每一盎司的CPU功率。
  4. 步骤1涉及在整个代码周围添加while循环。

    第2步涉及使用SetConsoleCursorPosition功能。

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

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