2013-02-13 44 views
0

如果運行此操作,數字時鐘將打開。它顯示小時,分鐘和秒,並突出顯示當前時間。如何在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; 
} 
+0

難道你不能在它周圍放置一個'while(true)',清除屏幕並重新打印時間?通過睡眠線程1秒(谷歌它)結束循環 – Toad 2013-02-13 12:25:00

+1

您使用'#define WHITE 15',然後仍然在代​​碼中使用'15' ... – 2013-02-13 12:32:44

+0

@Toad他可以做到這一點,但在我看來,那裏必須是更好的方式,就像人們用霰彈槍殺死蒼蠅一樣,但有更好的辦法。 – mah 2013-02-13 12:33:46

回答

2

所以,有三個步驟,我想你想要做的事:

  1. 重複輸出的時間變化時。
  2. 返回屏幕頂部。
  3. 在此過程中不使用每盎司的CPU功率。

第1步涉及在整個代碼周圍添加一個while循環。

步驟2涉及使用SetConsoleCursorPosition功能。

第3步需要調用Sleep(250)或類似的東西[你不想睡覺一整秒,但足夠長的時間,該代碼不使用了所有的CPU只是爲了檢查每毫秒如果時間有改變)。您應該也可以檢查當前時間是否與上次相同,然後不打印。

我個人會簡化所有的輸出,通過將(etc)移出if/else - 畢竟它們是相同的雙方。實際上,我將變量設置爲該顏色,然後在if後面調用SetConsoleTextAttributeprintf,只需在if/else語句中設置colour = WHITEcolour = RED即可。

+0

現在就開始吧,既然我在C中還不是很好,那還需要一些時間。謝謝你的努力! – 2013-02-13 12:55:03

+0

其實這不是最好的解決方案,你知道有什麼方法可以做到這一點嗎? – 2013-02-13 13:06:34