0

これを実行すると、数値時計が開きます。時間、分、秒が表示され、現在の時刻が強調表示されます。

私が今欲しいのはそれを実行することです。2番目の時間が追加されると、強調表示された数字が1つ右に移動します。明らかに。

私はこれを行う方法がわかりません、何か助けてください?

これが私が今持っているコードです:

#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

したがって、3つのステップがあります。あなたがやりたいと思っていると思います:

  1. 時刻が変わったら出力を繰り返します。
  2. 画面上部に戻ります。
  3. プロセスですべてのオンスの CPU パワーを使用しないでください。

ステップ 1 では、コード全体に while ループを追加します。

ステップ 2 では、関数を使用しSetConsoleCursorPositionます。

ステップ 3 には、呼び出しSleep(250)またはそのようなものが含まれます [1 秒もスリープしたくありませんが、時間が変更されたかどうかをミリ秒ごとにチェックするためだけにコードがすべての CPU を使い果たしてしまうほどの十分な時間は必要ありません)。おそらく、現在の時刻が前回と同じかどうかも確認し、その場合は印刷しないでください。

個人的には、(etc) を if/else の外に移動することで、すべての出力も単純化しますprintf("%i", i);。結局のところ、両側は同じです。実際、変数を色に設定してから、両方SetConsoleTextAttributeを呼び出し、if の後に、if/else ステートメントでorをprintf設定するだけです。colour = WHITEcolour = RED

于 2013-02-13T12:46:15.063 に答える