안녕하세요. 동글쌤 입니다.
지난 강의에서 입출력 함수, 자료형과 변수를 사용해 로그인 기능을 만들어봤습니다.
지난 강의 : 2022.10.28 - [강의/나 혼자 C언어 : 기초] - 만들면서 배우는 나 혼자 C언어 : 02. 입출력 함수, 자료형과 변수
이번 강의에서는 조건문을 사용하여 게임 메뉴를 만들어보도록 하겠습니다.
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를 넣어 끝내주어야 합니다.
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언어 : 기초' 카테고리의 다른 글
만들면서 배우는 나 혼자 C언어 : 05. 기초 활용 - 전투 시스템 만들기 (0) | 2022.12.08 |
---|---|
만들면서 배우는 나 혼자 C언어 : 04. 반복문 (0) | 2022.11.15 |
만들면서 배우는 나 혼자 C언어 : 02. 입출력 함수, 자료형과 변수 (0) | 2022.10.28 |
만들면서 배우는 나 혼자 C언어 : 01. 기본 구조 (2) | 2022.10.26 |
만들면서 배우는 나 혼자 C언어 : 프로그램 설치(Visual Studio 2022, Dev-C++, Replit) (3) | 2022.10.25 |
댓글