본문 바로가기
강의/나 혼자 C언어 : 기초

만들면서 배우는 나 혼자 C언어 : 03. 조건문

by dongglessam 2022. 11. 8.
728x90
반응형
728x170

안녕하세요. 동글쌤 입니다.

지난 강의에서 입출력 함수, 자료형과 변수를 사용해 로그인 기능을 만들어봤습니다.

지난 강의 : 2022.10.28 - [강의/나 혼자 C언어 : 기초] - 만들면서 배우는 나 혼자 C언어 : 02. 입출력 함수, 자료형과 변수

 

만들면서 배우는 나 혼자 C언어 : 02. 입출력 함수, 자료형과 변수

안녕하세요. 동글쌤 입니다. 지난 강의에서 기본 구조에 대해 배웠으니 이제 우리가 실제로 만들 프로그램을 보면서 C언어의 주요 기능에 대해 배워보도록 하겠습니다. 이전 글 : 2022.10.26 - [강의

choisdevil.tistory.com

 

이번 강의에서는 조건문을 사용하여 게임 메뉴를 만들어보도록 하겠습니다.

 

 

01. 조건문 : if, if ~ else, if ~ else if

 

조건문이란 특정 조건에 해당할 때만 실행할 수 있도록 하는 문법입니다. 인류의 가장 고전적 난제 중 하나인 '엄마가 좋아? 아빠가 좋아?' 도 조건문에 해당하는 것이죠.

만약 아빠가 좋다면 대답은 '아빠'로 나올 것이고, 엄마가 좋다면 대답은 '엄마'로 나올 것입니다. 이렇게 특정 조건에 따라서 실행이 되게 할 수도, 되지 않게 할 수도 있는 것이 조건문의 역할입니다.

조건문의 종류에는 크게 세 가지가 있습니다.

 

1. if문

if문은 특정 조건이 참일 경우에만 실행할 수 있도록 합니다. 예를 들어 '엄마가 좋아? 아빠가 좋아?' 라는 질문에 대해 if문으로 바꾸면 아래와 같이 됩니다.

if (좋아하는사람 == "엄마") {
    printf("엄마가 좋아");
}

if (좋아하는사람 == "아빠") {
    printf("아빠가 좋아");
}

==는 연산자의 종류 중 하나로, 왼쪽과 오른쪽이 같다는 의미를 가지는 연산자 입니다. 만약 '좋아하는사람'에 저장된 값이 엄마라면(좋아하는사람 == "엄마") 해당 조건이 참(왼쪽과 오른쪽이 같으므로)이 되어 if문의 중괄호({ }) 안에 있는 문장들을 실행하게 됩니다. 반대로 '좋아하는사람'에 저장된 값이 엄마가 아니라면 해당 조건이 거짓이 되어 if문을 실행하지 않고 빠져나가게 됩니다.

우리가 배웠던 입출력 함수를 활용하여 C언어 프로그램으로 만들어본다면 아래와 같이 코드를 구현해볼 수 있을 겁니다.

#include <stdio.h>
int main() {
    char[5] input_like_parents;	//응답을 입력받을 문자열 변수

    printf("엄마가 좋아? 아빠가 좋아? : ");
    scanf("%s", &input_like_parents);	//입력받은 값을 변수 input_like_parents에 저장

    if(input_like_parents == "엄마") {	//입력한 값이 '엄마'면
        printf("엄마가 좋아");	//"엄마가 좋아" 출력
    }

    if(input_like_parents == "아빠") {	//입력한 값이 '엄마'면
        printf("아빠가 좋아");	//"아빠가 좋아" 출력
    }

    return 0;
}

 

2. if ~ else문

if문의 경우에는 조건문이 거짓일 경우 아무것도 실행하지 않는 결과를 가지게 됩니다. 하지만 조건문이 참과 거짓일 때 각각 다른 문장을 실행하려 한다면 if ~ else문을 사용하는 것이 바람직합니다.

if (좋아하는사람 == "엄마") {	//좋아하는사람이 '엄마'면
    printf("엄마가 좋아");	//"엄마가 좋아" 출력
} else {	//좋아하는사람이 '엄마'가 아니면
    printf("아빠가 좋아");	//"아빠가 좋아" 출력
}

if ~ else문을 사용할 때 조심해야 할 점은, 주어진 조건이 거짓일 경우에 대한 범위를 생각해봐야 한다는 것입니다.

위 코드에서는 '좋아하는사람'에 저장된 값이 '엄마'가 아닐 경우(거짓)엔 무조건 "아빠가 좋아" 라고 출력하게 되어있습니다. 달리 말하면 이 얘기는 '좋아하는사람'에 저장된 값이 엄마가 아닌 모든 값은 아빠가 좋다고 출력되게 하는 것이죠. 

이를 보통 '예외처리'라고 부르게 되는데, 이 경우엔 예외처리를 할 수 있는 방법이 2가지가 있습니다.

1. 입력을 '아빠', '엄마' 2가지만 받게 하는 방법
2. '좋아하는사람'에 있는 값을 비교할 때 1) '아빠'인 경우, 2) '엄마'인 경우, 3) 그 외의 경우 각각 실행하는 방법

1번의 경우에는 scanf() 함수로 입력받은 값을 if문으로 검사하여 '아빠', '엄마'를 제외한 값은 넣지 못하게 할 수 있습니다. 2번의 경우에는 아래서 설명할 if ~ else if문을 사용하는 것이 제일 효과적입니다.

 

3. if ~ else if문

if ~ else if문은 위에서 배운 if문과 if ~ else문과는 다르게 조건을 여러개 검사하고, 그 중 참이 되는 문장만 실행할 수 있습니다. 

if (좋아하는사람 == "엄마") {	//좋아하는사람이 '엄마'면
    printf("엄마가 좋아");	//"엄마가 좋아" 출력
} else if (좋아하는사람 == "아빠"){	//좋아하는사람이 '아빠'면
    printf("아빠가 좋아");	//"아빠가 좋아" 출력
} else {	//좋아하는사람이 '엄마'도 아니고 '아빠'도 아니면
    printf("그럼 누가 좋다는거야!");
}

위 코드를 보면 제일 먼저 if문에서 '좋아하는사람'에 저장된 값이 '엄마'인지 비교합니다. 만약 맞다면 "엄마가 좋아"를 출력하고 끝이 납니다. 하지만 저장된 값이 엄마가 아니면 그 다음 else if문으로 내려가 '좋아하는사람'에 저장된 값이 '아빠'인지 비교합니다. 위와 마찬가지로 저장된 값이 '아빠'라면 "아빠가 좋아"를 출력하고 끝이 나지만, 아니라면 그 다음 else문으로 내려갑니다. else문까지 내려갔다는 것은 저장된 값이 '엄마'도 아니고 '아빠'도 아니기 때문에 else문에 있는 문장을 출력하게 됩니다.

if(조건1) {
    /* 문장 실행 */
} else if(조건2) {
    /* 문장 실행 */
} else if(조건3) {
    /* 문장 실행 */
} else if(조건4) {
    /* 문장 실행 */
} else {
    /* 문장 실행 */
}

else if문은 필요한 만큼 if 와 else 사이에 여러 개를 넣을 수 있으며, if ~ else if문의 맨 마지막에는 else를 넣어 끝내주어야 합니다.

 

728x90

 

 

02. 조건문 활용 : 메뉴 만들기

 

게임 내에서 조건문을 활용하여 만들 수 있는 기능은 여러가지가 있습니다만, 이번 시간에는 게임 메뉴를 만들어 보도록 하겟습니다.

맨 처음 실행하게 되면 사용자에게 선택할 수 있는 선택지(메뉴)를 보여주고, 사용자가 해당하는 메뉴의 번호를 입력하면 해당 기능을 실행할 수 있도록 합니다. 이를 위해 우리는 위에서 배운 조건문 중 if ~ else if문을 사용하여 메뉴를 만들어보겠습니다. if문이나 if ~ else문을 사용할 경우 다중 선택이 어렵기 때문에 우리가 원하는 'n개의 메뉴 버튼 중 하나를 선택'할 수 없기 때문이죠.

위 화면을 순서도로 구현해보면 이런 식으로 구현할 수 있을 것입니다. 순서도는 흐름을 이해하는데 용이하므로 처음 설계하실 때는 대략적으로라도 순서도로 구현해보면 실제 코드의 흐름을 이해하기 편합니다.

 

#include <stdio.h>
int main() {
    int menu;	//메뉴 선택 입력을 받을 변수

	//메뉴 출력
    printf(">> C언어 게임 <<\n");
    printf("1. 회원가입\n");
    printf("2. 로그인\n");
    printf("0. 종료\n\n");
    printf(">> ");
    
    scanf("%d", &menu);	//선택 입력
    
    if(menu == 1) {	//회원가입 기능
    	printf("회원가입\n");
    } else if(menu == 2) {	//로그인 기능
    	printf("로그인\n");
    } else if(menu == 0) {	//종료
    	printf("종료\n");
        return 0;
    }
    
    return 0;
}

지금은 회원가입, 로그인 기능에 대해 실제 기능 구현이 되어있지 않기 때문에 회원가입, 로그인에 대해 안내 문구로 출력만 해주도록 합니다. 그렇지 않으면 메뉴를 선택했을 때 실제로 동작하는지 확인할 수 없기 때문이죠.

 

반응형

 

실제로 실행해보면 그럴싸하게 화면이 나오는 것 같지만 위 코드에서의 단점은 다음과 같습니다.

1. 종료를 할 때 1, 2를 제외한 나머지 숫자를 입력해도 프로그램이 종료됨.

2. 잘못 입력해도 프로그램이 종료됨.

따라서 이 부분을 다음 시간에 배울 반복문을 활용하여 개선하도록 해보겠습니다.

 

다음 강의 : 2022.11.15 - [강의/나 혼자 C언어 : 기초] - 만들면서 배우는 나 혼자 C언어 : 04. 반복문

 

만들면서 배우는 나 혼자 C언어 : 04. 반복문

안녕하세요. 동글쌤 입니다. 지난 강의에서 조건문을 통해 게임 메뉴를 만들어봤습니다. 이전 글 : 2022.11.08 - [강의/나 혼자 C언어 : 기초] - 만들면서 배우는 나 혼자 C언어 : 03. 조건문 만들면서

choisdevil.tistory.com

 

728x90
반응형
그리드형

댓글