언어/C

[코딩자율학습] 9일차 프로젝트: 비밀번호 마스터

홍시_코딩기록 2024. 3. 14. 23:18

 

(전체코드)

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

int getRandomNumber(int level);
void showQuestion(int level, int num1, int num2);
void success();
void fail();

int main(void) {
	srand(time(NULL));
	int count = 0;

	for (int i = 1; i <= 5; i++) {
		int num1 = getRandomNumber(i);
		int num2 = getRandomNumber(i);
		//printf("%d * %d = %d\\n", num1, num2);
		showQuestion(i, num1, num2);
		int answer = -1;
		scanf_s("%d", &answer);

		if (answer == -1) {
			printf("\\n프로그램을 종료합니다.\\n");
			exit(0);
		} else if (answer == num1 * num2) {
			success();
			count++;
		} else {
			fail();
		}
	}
	printf("비밀번호 %d개를 맞혔습니다.", count);
	return 0;
}

int getRandomNumber(int level) {
	return rand() % (level * 9) + 1;
}

void showQuestion(int level, int num1, int num2) {
	printf("\\n\\n######%d번째 비밀번호#####\\n", level);
	printf("\\n%d * %d \\n", num1, num2);
	printf("\\n비밀번호를 입력하세요. (종료를 원하면 -1입력)  : ");
}

void success() {
	printf("\\n 정답");
}

void fail() {
	printf("\\n 실패");
}

(실행결과)

 

 

📌 코드 나눠보기

 

1. 헤더파일 추가

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
  • rand() 함수를 사용하기 위해서 time.h, stdlib.h 추가

 

2. 함수 선언

int getRandomNumber(int level);
void showQuestion(int level, int num1, int num2);
void success();
void fail();
  • getRandomNumber(); 저수인 난수를 반환해서 int, 전달값 i로 들어오는 매개변수는 문제 단계
  • showQuestion(); 반환값이 없어서 void, 문제 단계, 숫자1, 숫자2 를 보여줌.
  • success(); fail(); 성공했을 때 실패했을 때 메세지 출력 함수

 

3. main함수

int main(void) {
	srand(time(NULL));
	int count = 0;

	for (int i = 1; i <= 5; i++) {
		int num1 = getRandomNumber(i);
		int num2 = getRandomNumber(i);
		//printf("%d * %d = %d\\n", num1, num2);
		showQuestion(i, num1, num2);
		int answer = -1;
		scanf_s("%d", &answer);

		if (answer == -1) {
			printf("\\n프로그램을 종료합니다.\\n");
			exit(0);
		} else if (answer == num1 * num2) {
			success();
			count++;
		} else {
			fail();
		}
	}
	printf("비밀번호 %d개를 맞혔습니다.", count);
	return 0;
}

  • srand(time(NULL)); 난수 초기화
  • count = 0; 문제 맞힌 개수 변수 선언
  • for( ); 문제가 5번 반복되됨.
  • num1, num2; getRandomNumber() 함수에서 받아온 값이 들어감.
  • showQustion(); 질문 들어오는 함수 출력
  • int answer = -1; 초기값 -1 으로 설정
  • scanf_s("%d", &answer); 정답 적음
  • if() ~ ; 정답일 경우, 실패할 경우, 프로그램 종료시 조건문 추가
  • printf(); 몇개 맞혔는지 출력

 

더보기

💡 변수의 초깃값 의도치 않는 동작이 수행되지 않도록 혼란을 피하기 위해 초깃값을 설정하기도 함.

더보기

💡 exit() 함수로 프로그램 종료하기 exit()는 현재 실행 중인 프로그램을 종료하는 함수. 0 을 넣으면 정상 종료 1 (일반적으로 씀) 을 넣으면 오류 발생으로 인한 종료 stdlib.h 추가해야 쓸 수 있음.

 

 

4. 함수 정의

int getRandomNumber(int level) {
	return rand() % (level * 9) + 1;
}

void showQuestion(int level, int num1, int num2) {
	printf("\\n\\n######%d번째 비밀번호#####\\n", level);
	printf("\\n%d * %d \\n", num1, num2);
	printf("\\n비밀번호를 입력하세요. (종료를 원하면 -1입력)  : ");
}

void success() {
	printf("\\n 정답");
}

void fail() {
	printf("\\n 실패");
}
  • getRandomNumber(); 레벨이 올라갈 수록 큰 숫자가 나오게 설정
  • showQuestion(); 각 문제 단계, 곱하기 계산식, 비밀번호 입력 문구 출력
  • success(), fail(); 성공 실패 문구

 

 

📌 셀프체크 문제

더보기

영화의 상영 시간 정보를 분(min)에서 시간 + 분으로 변환해 표시하는 프로그램을 함수로 만들어 보세요.

 

조건)

1. 함수의 이름은 convert_time

2. 함수는 전달값으로 영화의 상영 시간 정보인 분에 해당하는 정수형 값 1개를 받음 ( 118분, 148분)

3. 전달받은 분을 시간 + 분 단위로 변환해 출력 ( 118분 -> 1시간 58분)

4. 함수의 반환값은 없음.

 

 

(내 코드)

#include <stdio.h>

void convert_time(int min);

int main(void) {
	printf("숫자 적으셈");
	int answer = 0;
	scanf_s("%d", &answer);
	convert_time(answer);
	return 0;
}

void convert_time(int min) {
	int hour = min / 60;
	int minutes = min % 60;
	printf("%d시간 %d분\n", hour, minutes);
};

- 정답코드는 main에 숫자값을 적어놓았고 나는 사용자가 입력하도록 바꿨다.

- 계속 시간만 나오고 분은 안나와서 뭔지 한참 찾았는데 분 앞에 d가 빠져서였다.,