Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어로 숫자 맞추기 게임 프로그램 작성하기

C 언어를 배우는 초보 개발자에게 숫자 맞추기 게임은 조건문(if~else)과 반복문(do~while)의 동작 원리를 익히기에 가장 좋은 실습 예제입니다. 이 글에서는 프로그램에 미리 저장된 숫자를 사용자가 맞히는 게임을 C 언어로 구현하고, 각 시도마다 힌트를 제공하는 방법까지 단계별로 살펴봅니다.

문제 정의

프로그램 안에는 이미 어떤 숫자가 상수로 초기화되어 있습니다(예제에서는 64). 사용자는 이 숫자가 무엇인지 직접 입력하여 맞혀야 하며, 사용자가 값을 입력할 때마다 프로그램은 다음과 같은 힌트를 제공합니다.

  • 입력한 값이 정답보다 작다면: "입력하신 숫자가 정답보다 낮습니다"
  • 입력한 값이 정답보다 크다면: "입력하신 숫자가 정답보다 높습니다"
  • 입력한 값이 정답과 일치하면: 게임 종료 및 축하 메시지 출력

해결 로직

숫자를 맞히는 핵심 로직은 다음과 같습니다.

do{
    if(num==guess){
        flag=0;
    } else if(guess<num) {
        flag=1;
        printf("Your guess is lower than the number\n");
        count++;
    } else {
        flag=1;
        printf("Your guess is greater than the number\n");
        count++;
    } if(flag==1) {
        printf("sorry wrong enter! once again try it\n");
        scanf("%d",&guess);
    }
} while(flag);

로직 흐름 설명

  1. 첫 입력 받기: scanf() 함수로 사용자에게 첫 번째 추측값을 입력받습니다.
  2. 정답 비교: do~while 루프 안에서 입력값(guess)과 정답(num)을 비교합니다.
  3. 힌트 출력: 입력값이 정답보다 작거나 크면 방향을 알려주고, 시도 횟수(count)를 1 증가시킵니다.
  4. 재입력 요청: 아직 정답이 아니라면(flag==1) 다시 입력을 받습니다.
  5. 루프 종료: 정답을 맞히면 flag가 0이 되어 while(flag) 조건이 거짓이 되고, 반복문이 종료됩니다.

전체 소스 코드

다음은 숫자 맞추기 게임을 구현한 완전한 C 프로그램입니다.

#include<stdio.h>
main() {
    int i,num=64,flag=1,guess,count=0;
    printf("guess the number randomly here are some clues later\n");
    scanf("%d",&guess);
    do {
        if(num==guess) {
            flag=0;
        } else if(guess<num) {
            flag=1;
            printf("Your guess is lower than the number\n");
            count++;
        } else {
            flag=1;
            printf("Your guess is greater than the number\n");
            count++;
        }
        if(flag==1) {
            printf("sorry wrong enter! once again try it\n");
            scanf("%d",&guess);
        }
    } while(flag);
    printf("Congratulations! You guessed the correct number %d\n",num);
    printf("Total number of trails you attempted for guessing is: %d\n",count);
}

주요 변수 정리

변수역할
num프로그램에 미리 저장된 정답 숫자 (64)
guess사용자가 입력한 추측값
flag게임 진행 여부 판단 (1: 계속, 0: 정답)
count틀린 시도 횟수 누적

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

guess the number randomly here are some clues later
45
Your guess is lower than the number
sorry wrong enter! once again try it
60
Your guess is lower than the number
sorry wrong enter! once again try it
70
Your guess is greater than the number
sorry wrong enter! once again try it
65
Your guess is greater than the number
sorry wrong enter! once again try it
62
Your guess is lower than the number
sorry wrong enter! once again try it
64
Congratulations! You guessed the correct number 64
Total number of trails you attempted for guessing is: 5

사용자가 45 → 60 → 70 → 65 → 62 순서로 입력하며 정답 범위를 좁혀간 뒤, 여섯 번째 시도인 64를 입력해 성공적으로 정답을 맞힌 것을 확인할 수 있습니다.

확장 아이디어

기본 예제를 익힌 후에는 다음과 같이 프로그램을 발전시켜 볼 수 있습니다.

  • 난수 생성 적용: stdlib.h의 rand()와 srand(time(NULL))를 활용하면 실행할 때마다 정답이 달라져 재미가 더해집니다.
  • 시도 횟수 제한: 최대 시도 횟수를 정해두고 초과하면 게임 오버 처리를 추가할 수 있습니다.
  • 범위 지정: 1~100 사이의 숫자만 허용하도록 입력값 유효성 검사를 넣으면 더 견고한 프로그램이 됩니다.

이처럼 숫자 맞추기 게임은 짧은 코드로도 반복문 탈출 조건 설계, 상태 관리 변수 활용 등 C 프로그래밍의 핵심 개념을 자연스럽게 연습할 수 있는 좋은 예제입니다.