C언어로 스톱워치/타이머 만들기4 - 기본 구현하기3(타이머기능 구현)

컴퓨터/Projects

728x90
반응형

Github - 그간의 행적 확인

 

GitHub - Gon-91/Timer

Contribute to Gon-91/Timer development by creating an account on GitHub.

github.com

이전 포스트

더보기

오늘의 목표

  • 타이머 기능 추가하기

전체 소스코드

더보기
#include<stdio.h>
#include<time.h>
#include<Windows.h>
#include<conio.h>

int main() {
	while (1) {
		//메뉴 입력
		system("cls");
		printf("\t=== Test Program ==\n\n");
		int input;
		printf("1.스톱워치\t2.타이머\t3.종료\n\n");
		printf("원하는 메뉴를 입력 하세요 : ");
		scanf_s("%d", &input);
		//메뉴에 따른 제어
		if (input > 0 && input < 4) {
			if (input == 3) {
				printf("프로그램을 종료 합니다.");
				break;
			}

			switch (input)
			{
			case 1:
				/*
				* 아래 기능을 포함하여 구현 예정
				* 시작 | 기록 | 정지 | 초기화
				*/
				printf("아무키나 누르면 시작 합니다.");
				system("pause");
				clock_t start_time = clock();
				while (1) {
					clock_t curr_time = clock() - start_time;

					//UI개선 하기
					double time_double = (double)curr_time / 1000;
					//printf("%.3lf\n", time_double);

					int trans;
					int undersec;
					int sec;
					int min;
					int hour;

					trans = (int)time_double;
					undersec = curr_time%1000;
					sec = trans % 60;
					min = trans /60%60;
					hour = trans /60/60;

					printf("\n\n\t%d:%d:%d.%d\n\n", hour,min,sec, undersec);
					
					//키 입력을 받았을때 멈추기(일시정지)
					if (_kbhit()) {
						
						printf("1.재시작\t2.초기화\t3.종료\n");
						printf("원하는 기능을 선택 하세요 : ");
						scanf_s("%d", &input);
						//1. 재시작 선택시 스톱워치가 이어서 진행
						if (input == 1) {
							start_time = clock() - curr_time;
							continue;
						}
						//2. 초기화 선택시 스톱워치가 초기화 후 진행
						if (input == 2) {
							start_time = clock();
							continue;
						}
						else {
							break;
						}

					}
					system("cls");
				}
				system("pause");
				break;

			case 2:
				/*
				* 시간 / 분 / 초를 이용한 타이머 카운팅 시작하게 구현 예정
				* 최대 100시간 ? 
				* 입력을 통해 카운팅 시간 설정 
				* 시작 | 정지 | 초기화 
				*/
				//printf("2번\n");

				//타이머 설정 입력 
				int set_total = 0;;
				printf("시간을 입력해 주세요 : ");
				scanf_s("%d", &input);
				set_total = input * 60 * 60;
				printf("분을 입력해 주세요 : ");
				scanf_s("%d", &input);
				set_total += input * 60;
				printf("초를 입력해 주세요 : ");
				scanf_s("%d", &input);
				set_total += input;
				printf("%d\n", set_total);

				printf("아무키나 누르면 타이머가 실행됩니다.\n");
				printf("설정 시간 %d:%d:%d\n", set_total/60/60, set_total/60%60, set_total%60);
				system("pause");


				// 시간 카운팅 시작 값
				clock_t start_time2 = clock();
				while (1) {
					system("cls");
					// 0초로 맞춤
					clock_t curr_time = clock() - start_time2;
					double time_double = (double)curr_time / 1000;
					int curr_sec = (int)time_double;
					int target = set_total - curr_sec;
					printf("\n\n\t%d:%d:%d\n\n", target / 60 / 60, target / 60 % 60, target % 60);
					if (target == 0) {
						printf("설정하신 시간이 모두 소모되었습니다.\n");
						system("pause");
						break;

					}
				}

			}
		}
		//예외 처리
		else {
			while (getchar() != '\n') {}
			printf("잘못된 입력입니다.");
			system("pause");
		}
	}
	return 0;
}

 

타이머 부분 소스코드

/*
* 시간 / 분 / 초를 이용한 타이머 카운팅 시작하게 구현 예정
* 최대 100시간 ? 
* 입력을 통해 카운팅 시간 설정 
* 시작 | 정지 | 초기화 
*/
//printf("2번\n");

//타이머 설정 입력 
int set_total = 0;;
printf("시간을 입력해 주세요 : ");
scanf_s("%d", &input);
set_total = input * 60 * 60;
printf("분을 입력해 주세요 : ");
scanf_s("%d", &input);
set_total += input * 60;
printf("초를 입력해 주세요 : ");
scanf_s("%d", &input);
set_total += input;
printf("%d\n", set_total);

printf("아무키나 누르면 타이머가 실행됩니다.\n");
printf("설정 시간 %d:%d:%d\n", set_total/60/60, set_total/60%60, set_total%60);
system("pause");


// 시간 카운팅 시작 값
clock_t start_time2 = clock();
while (1) {
	system("cls");
	// 0초로 맞춤과 설정 시간 - 소모시간 출력
	clock_t curr_time = clock() - start_time2;
	double time_double = (double)curr_time / 1000;
	int curr_sec = (int)time_double;
	int target = set_total - curr_sec;
	printf("\n\n\t%d:%d:%d\n\n", target / 60 / 60, target / 60 % 60, target % 60);
	//시간 소모시 탈출
	if (target == 0) {
		printf("설정하신 시간이 모두 소모되었습니다.\n");
		system("pause");
		break;

	}
}
  • 타이머 진입 시 시간을 키 입력을 통해 설정한다.
				//타이머 설정 입력 
				int set_total = 0;;
				printf("시간을 입력해 주세요 : ");
				scanf_s("%d", &input);
				set_total = input * 60 * 60;
				printf("분을 입력해 주세요 : ");
				scanf_s("%d", &input);
				set_total += input * 60;
				printf("초를 입력해 주세요 : ");
				scanf_s("%d", &input);
				set_total += input;
				printf("%d\n", set_total);
  • 시간/분/초를 입력받아 모두 초로 환산 후 포맷을 만들어 출력한다.
				printf("아무키나 누르면 타이머가 실행됩니다.\n");
				printf("설정 시간 %d:%d:%d\n", set_total/60/60, set_total/60%60, set_total%60);
				system("pause");
  • 반복문에 진입하며 시간을 카운팅 하며 설정 시간 - 카운팅 시간으로 계산하여 출력한다
// 시간 카운팅 시작 값
				clock_t start_time2 = clock();
				while (1) {
					system("cls");
					// 0초로 맞춤과 설정 시간 - 소모시간 출력
					clock_t curr_time = clock() - start_time2;
					double time_double = (double)curr_time / 1000;
					int curr_sec = (int)time_double;
					int target = set_total - curr_sec;
					printf("\n\n\t%d:%d:%d\n\n", target / 60 / 60, target / 60 % 60, target % 60);
  • 설정 시간 = 카운팅 시간이 된다면 타이머를 종료한다
					//시간 소모시 탈출
					if (target == 0) {
						printf("설정하신 시간이 모두 소모되었습니다.\n");
						system("pause");
						break;

					}
				}

후기 

처음에 타이머를 초로 환산하지 않고 시/분/초의 상태의 변수를 만들어 구현하려 했으나... 잘 안되고 효율적이지 않아서 애먹었다.. 생각 끝에 결과물을 가지고 오니 훨씬 간단하게 해결되었다. 

 

다음 포스트 목표

  • 타이머 부분 일시정지/재시작/다시설정 기능 추가
  • 시/분/초 입력 관련 예외처리 추가
  • 약간의 UI개선

시간이 된다면...

  • 지저분한 소스코드 정리 및 함수화

2021.12.15 - [컴퓨터/Projects] - C언어로 스톱워치/타이머 만들기5 - 기본 구현하기4(타이머기능 개선)

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :