1. clock()
-
프로그램 실행 후 현재까지 경과된 시간을 ms 단위로 반환
프로그램 실행 시간은 효율성 측정 등 여러 곳에서 사용된다.
이번에는 시간 측정으로 타자 연습기를 구현해봤다.
코드는 아래와 같다.
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <Windows.h>
#include <time.h>
#define rows 2
#define column 80
int main()
{
int i, j, k, len, wnum, menu;
float t;
char str[rows][column] = { "apple is sweet","expensive banana" };
char c[column], name[column];
printf("Input your name : ");
gets(name);
system("cls");
while (1) {
while (1) {
printf("Menu Option\n1.English 2.Exit\n");
scanf_s("%d", &menu);
if ((menu > 0) && (menu < 3))
break;
printf("\bError!\n");
}//while
system("cls");
wnum = 0;
t = clock(); //시작시간 저장
if (menu == 1) {
for (j = 0; j < rows; j++) {
len = strlen(str[j]);
printf("%s\n", str[j]);
for (i = 0; i < len + 1; i++) { //길이를 len+1까지하여 최대길이+1(백스페이스 기회)까지만 입력
c[i] = _getch();
printf("%c", c[i]);
if (i > 0 && c[i] == 8) {
c[i - 1] = ' '; //백스페이스로 이전입력 지움
printf("%c\b", c[i - 1]);
i -= 2; //지움으로 -1이 아닌 -2
}
else if ((c[i] != '\r') && (i == len)) {
str[j][len + 1] = NULL;
printf("\b%c", str[j][len + 1]);
printf("\n\n"); //마지막에 다른 문자 입력시 바로 백스페이스 기회없이 \n(행을두번바꾸어야함)
}
else if ((c[i] == '\r') && (i == len)) { //엔터입력시(i==len은 마지막을 표현)
printf("\n\n"); //행을두번바꾸어야함
break; //break for i
}
else if (c[i] == '\r') { //중간에 엔터를 누를경우
for (k = 0; k < i; k++)
printf("%c", c[k]);
i--; //반복문으로 인해 -1(입력문자가없었으므로)
}
else if ((c[i] != str[j][i]) && (i != len)) {//다를경우(마지막줄은 바로 \n이므로 제외)
printf("\a");
}
else {
;
}
}//for i
for (k = 0; k < len; k++) {
if (c[k] != str[j][k]) {
wnum++;//오타일경우
}
}
}
t = clock() - t;
t /= 1000;
// %연산자는 피연산자가 정수형이어야함 그래서 출력도 %d
printf("%s님의 연습결과\n\n평균타수 : %.f타\n연습시간 : %.f분 %.d초\n정확도 : %.f%%",
name, (60 / t) * 30, t / 60, (int)t % 60, ((30 - (float)wnum) / 30) * 100);
_getch();
system("cls");
}
if (menu == 2) {
break;
}
}
printf("\n프로그램 종료..\n");
return 0;
}
1. 사용자 이름과 메뉴(사용 언어) 입력
2. 언어 입력 시 clock()을 이용해 시간 측정 후 미리 저장한 텍스트 출력 (타자 연습 내용)
3. _getch()를 이용해 문자 비교, 틀릴 경우 이스케이프 시퀀스 '\b' 출력 (비프음)
4. 백스페이스 (아스키 코드 : 8) 기능 추가
5. 타자 연습 종료 후 시간, 타수, 정확도 출력
6. 아무 키나 입력 시 syscls("cls") 호출 후 메뉴로 점프
파일 입출력을 이용하면 좀 더 현실적인 타자연습기를 구현할 수 있을 것이다.
'Language > C, C++, C#' 카테고리의 다른 글
[C, C++] 동적 메모리 할당 비교 (0) | 2023.11.24 |
---|---|
[C] Sleep(), system("cls")를 이용한 주사위 굴리기 (0) | 2020.08.16 |
[C] 배열과 포인터의 관계 (0) | 2020.06.21 |
[C] 방향키로 printf() 커서 위치 이동 (gotoxy) (0) | 2020.06.09 |
[C] 아스키코드(ASCII)와 유니코드(Unicode)란? (0) | 2020.06.09 |