반응형
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;
}
반응형
'C언어 > C언어 예제' 카테고리의 다른 글
피보나치 수열 – 재귀 알고리즘과 탐욕 알고리즘으로 구현[C언어] (0) | 2020.06.30 |
---|---|
3X3 퍼즐 게임 소스 코드 (0) | 2020.06.05 |
float 4바이트 실수 형식 메모리에 표현 방식을 확인할 수 있는 C 소스 코드 작성하기 (0) | 2020.04.22 |
[C언어 소스] 순차 정렬 알고리즘 시뮬레이션(정렬 과정 시각화) (0) | 2020.04.13 |
10진수를 2진수로 변환, 1의 개수 구하기, 반복문, 나누기, 나머지 연산 사용 불가 (0) | 2020.04.12 |