C언어/C언어 예제

디지털 시계 만들기

언제나휴일 2020. 6. 4. 16:38
반응형

 

디지털 시계 만들기 동영상 강의

C언어 학습할 때 콘솔 응용만 매 번 만들어서 지루할 수 있죠.

특별히 무엇인가를 전달하기 위한 목적보다 지루함을 덜기 위해 "그냥" 만드는 디지털 시계 만들기 실습입니다.

현재 초 단위 시간을 얻어오는 time(0) 함수와 초 단위 시간을 지역 시각으로 변환해 주는 localtime_s 함수를 이용합니다. 

콘솔 응용에서 커서 위치를 이동시키는 SetConsoleCursorPosition 함수는 Win32 API 함수를 이용합니다.

키보드를 눌렀는지 체크하는 부분은 _kbhit 함수를 이용합니다.

 

 

#include <Windows.h>
#include <stdio.h>
#include <time.h>
#include <conio.h>

char* digits[10][5][4] =//0~9까지 출력할 정보
{
    {
        { "■","■","■","■" },
        { "■","  ","  ","■" },
        { "■","  ","  ","■" },
        { "■","  ","  ","■" },
        { "■","■","■","■" }
    },
    {
        { "  ","  ","  ","■" },
        { "  ","  ","  ","■" },
        { "  ","  ","  ","■" },
        { "  ","  ","  ","■" },
        { "  ","  ","  ","■" }
    },
    {
        { "■","■","■","■" },
        { "  ","  ","  ","■" },
        { "■","■","■","■" },
        { "■","  ","  ","  " },
        { "■","■","■","■" }
    },
    {
        { "■","■","■","■" },
        { "  ","  ","  ","■" },
        { "■","■","■","■" },
        { "  ","  ","  ","■" },
        { "■","■","■","■" }
    },
    {
        { "■","  ","■","  " },
        { "■","  ","■","  " },
        { "■","■","■","■" },
        { "  ","  ","■","  " },
        { "  ","  ","■","  " }
    },
    {
        { "■","■","■","■" },
        { "■","  ","  ","  " },
        { "■","■","■","■" },
        { "  ","  ","  ","■" },
        { "■","■","■","■" },
    },
    {
        { "■","  ","  ","  " },
        { "■","  ","  ","  " },
        { "■","■","■","■" },
        { "■","  ","  ","■" },
        { "■","■","■","■" }
    },
    {
        { "■","■","■","■" },
        { "■","  ","  ","■" },
        { "■","  ","  ","■" },
        { "  ","  ","  ","■" },
        { "  ","  ","  ","■" }
    },
    {
        { "■","■","■","■" },
        { "■","  ","  ","■" },
        { "■","■","■","■" },
        { "■","  ","  ","■" },
        { "■","■","■","■" }
    },
    {
        { "■","■","■","■" },
        { "■","  ","  ","■" },
        { "■","■","■","■" },
        { "  ","  ","  ","■" },
        { "  ","  ","  ","■" }
    }
};

int sx[6] = { 0,10,24,34,48,58 };//시분초를 출력할 x좌표 

char* colons[5] = { " ","■","  ","■","  " };
int sx2[6] = { 20,44 };//콜론을 출력할 좌표

void gotoxy(int x, int y)
{
    COORD Pos = { x,y };
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}

void DrawNum(int dn, int n)
{
    int y, x;
    for (y = 0; y < 5; y++)
    {
        for (x = 0; x < 4; x++)
        {
            gotoxy(sx[dn] + x * 2, y);
            printf("%s", digits[n][y][x]);
        }
        printf("\n");
    }
}
void DrawColon(int index)
{
    int y = 0;
    for (y = 0; y < 5; y++)
    {
        gotoxy(sx2[index], y);
        printf("%s\n", colons[y]);
    }
}
void DrawTime(int h, int m, int s)
{
    DrawNum(0, h / 10);
    DrawNum(1, h % 10);
    DrawColon(0);
    DrawNum(2, m / 10);
    DrawNum(3, m % 10);
    DrawColon(1);
    DrawNum(4, s / 10);
    DrawNum(5, s % 10);    
}
int main(void)
{    
    time_t now, before;
    struct tm nt;
    gotoxy(0, 8);
    printf("아무키나 누르면 프로그램 종료");

    now = before = time(0);
    localtime_s(&nt, &now);
    DrawTime(nt.tm_hour, nt.tm_min, nt.tm_sec);
    while (_kbhit() == 0)
    {
        now = time(0);
        if (now != before)
        {
            before = now;
            localtime_s(&nt, &now);
            DrawTime(nt.tm_hour, nt.tm_min, nt.tm_sec);
        }
    }
    return 0;
}

 

반응형