C언어로 스톱워치/타이머 만들기3 - 기본구현하기2(일시정지/재시작 초기화/디자인)

컴퓨터/Projects

728x90
반응형

Github - 그간의 행적 확인

 

GitHub - Gon-91/Timer

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

github.com

이전 포스트

 

C언어로 스톱워치/타이머 만들기 - 시작

배경 효율적인 C언어 공부를 하기 위해서 시작하는 첫 프로젝트 아닌 프로젝트. 목표는 어찌 되든 배포 파일까지 만들어 결과를 만들어 보기. 필요한 공부 내용들을 정리하며 프로젝트 일지를

blog-of-gon.tistory.com

 

 

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

Github - 그간의 행적 확인 GitHub - Gon-91/Timer Contribute to Gon-91/Timer development by creating an account on GitHub. github.com 이전 포스트 C언어로 스톱워치/타이머 만들기 - 시작 배경 효율적인 C..

blog-of-gon.tistory.com


오늘의 목표

  • 스톱워치 기능 추가하기 일시정지 / 재시작 / 초기화
  • 스톱워치 UI 약간 개선해보기

스톱워치 재시작 구현 

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

아무 키나 입력이 들어오면 스톱워치를 정지합니다. 이후 재시작을 선택한다면 이어하기 기능처럼 일시 정지된 스톱워치를 다시 실행시켜야 합니다. 

이때 아래와 같이 주의사항이 필요합니다.

  • 재시작을 하는 시점의 시간이 기준점이 되어야 합니다.
  • 따라서 start_time = clock() - curr_time으로 기준점을 변경했습니다.
  • 해석하자면 시작시간은 = 프로그램이 구동된 시간 - 일시정지되었을때의 시간. 
  • 예를 들어 프로그램 구동 10초 / 일시정지된 스톱워치 5초라고 하면
  • 다시 재시작 기능을 활성화 시 5초부터 계산하여 시작합니다.

스톱워치 초기화 구현

						//2. 초기화 선택시 스톱워치가 초기화 후 진행
						if (input == 2) {
							start_time = clock();
							continue;
						}
						else {
							break;
						}

초기화 구현은 간단하게 스톱워치가 시작되는 시점의 행위를 반복하면 됩니다.

측 시작시간을 clock() 함수를 호출하여 다시 갱신합니다.

  • start_time = 현재까지 프로그램이 구동된 시간

UI 개선 시/분/초로 표시하기 

//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);

간단하게 기존 초단위로 카운팅 되던 스톱워치 출력을 시/분/초 단위로 나누어 출력하면서 시각적인 성능을 개선시켰습니다. 

  • 초아래의 단위는 curr_time(ms단위)를 받아 1000 모듈 연산을 통해 출력한다.
  • double로 초단위로 변경한 녀석을 다시 int로 형변환 하여 순수 정수 값(초단위로 변경한다)
  • sce변수에 60으로 모듈 연산을 하여 초를 표시한다

전체 소스코드

#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");
				system("pause");
				break;
			}
		}
		//예외 처리
		else {
			while (getchar() != '\n') {}
			printf("잘못된 입력입니다.");
			system("pause");
		}
	}
	return 0;
}

다음포스트 목표

  • 타이머 관련요소 구성하기

 

 

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

Github - 그간의 행적 확인 GitHub - Gon-91/Timer Contribute to Gon-91/Timer development by creating an account on GitHub. github.com 이전 포스트 더보기 C언어로 스톱워치/타이머 만들기 - 시작 배경 효..

blog-of-gon.tistory.com

 

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

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

TODAY :

YESTER DAY :

TOTAL :