[ C ] SampleCode - 1~100 사이의 정수를 랜덤으로 2개 선택하여 덧셈 문제를 출제

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int num1, num2, answer, userAnswer;
    time_t startTime, endTime;
    srand(time(NULL)); // 현재 시간을 시드 값으로 사용하여 srand 함수 호출

    while(1) { // 무한 루프 시작
        // 1~100 사이의 정수 랜덤 생성
        num1 = rand() % 100 + 1; // 0~99 사이의 랜덤 정수를 생성한 뒤, 1을 더해 1~100 사이의 정수를 만듦
        num2 = rand() % 100 + 1;
        answer = num1 + num2; // 두 수의 합 계산

        // 문제 출제
        printf("%d + %d = ?\n", num1, num2); // 문제 출력
        startTime = time(NULL); // 문제 출제 시간 기록

        // 정답 입력 받기
        while(1) {
            printf("답을 입력하세요: ");
            scanf("%d", &userAnswer); // 사용자로부터 정답 입력 받기
            if(userAnswer == answer) break; // 입력한 값이 정답과 같으면 반복문 탈출
            printf("오답입니다. 다시 입력해주세요.\n"); // 정답과 다른 값을 입력했다면 오답 메시지 출력
        }

        // 정답 시간 출력
        endTime = time(NULL); // 정답 입력 시간 기록
        printf("정답입니다! 소요 시간: %ld초\n\n", endTime - startTime); // 정답 메시지와 소요 시간 출력
    }

    return 0;
}


/*******************************************
위 코드에서 srand(time(NULL))은 랜덤 값 생성을 위한 시드 값을 설정하기 위해
time(NULL) 함수의 반환값을 이용합니다.
time(NULL) 함수는 1970년 1월 1일 이후의 현재 시간을 초 단위로 반환합니다.
이를 시드 값으로 사용하면 매번 다른 랜덤 값이 생성됩니다.

while(1) 루프 안에서는 랜덤한 두 정수를 생성하여 덧셈 문제를 출제하고,
사용자가 정답을 입력할 때까지 반복하여 입력을 받습니다.
사용자가 정답을 입력하면 소요 시간을 출력하고, 다시 새로운 문제를 출제합니다.

각 변수나 함수의 자세한 설명은 아래와 같습니다.

num1, num2: 문제에서 사용할 1~100 사이의 정수
answer: num1과 num2의 합
userAnswer: 사용자가 입력한 답
startTime: 문제 출제 시간
endTime: 사용자가 정답을 입력한 시간
time(NULL): 1970년 1월 1일 이후의 현재 시간을 초로 누적하여 리턴( unixtimestamp )

***** 위 코드에서 사용된 함수

srand()
srand() 함수는 랜덤 값을 생성할 때 사용하는 시드(seed) 값을 설정하는 함수입니다. srand() 함수를 호출할 때마다 같은 시드 값을 전달하면 같은 랜덤 값을 생성합니다. 따라서 보통 time() 함수의 반환 값을 시드 값으로 사용하여 매번 다른 랜덤 값을 생성합니다.

time()
time() 함수는 현재 시각을 초 단위로 반환하는 함수입니다. 이 함수는 <time.h> 헤더 파일에 선언되어 있습니다. 일반적으로 시드 값을 설정할 때 사용됩니다.

rand()
rand() 함수는 0부터 RAND_MAX까지의 범위에서 랜덤한 값을 반환하는 함수입니다. rand() 함수를 호출하기 전에 srand() 함수를 호출하여 시드 값을 설정해야 합니다. rand() 함수는 <stdlib.h> 헤더 파일에 선언되어 있습니다.

scanf()
scanf() 함수는 사용자로부터 입력을 받는 함수입니다. scanf() 함수는 입력 형식 지정자를 이용하여 입력할 데이터의 형식을 지정해야 합니다. 일반적으로 %d 형식 지정자를 사용하여 정수를 입력받습니다. scanf() 함수는 성공하면 입력한 값의 개수를 반환합니다.

printf()
printf() 함수는 포맷 문자열을 이용하여 출력을 수행하는 함수입니다. %d 형식 지정자를 사용하여 정수를 출력할 수 있습니다. \n은 줄바꿈 문자입니다.

time_t
time_t는 시간 값을 저장하는 데이터 타입입니다. time() 함수는 time_t 타입의 값을 반환합니다.

NULL
NULL은 포인터 변수가 가리키는 값이 없음을 나타내는 상수입니다. NULL은 <stddef.h> 헤더 파일에 정의되어 있습니다.


*/