-
6장. 조건문이란?C++ 기본 문법 알아보기 2019. 1. 9. 11:58
이번 글에서는 조건문에 대해서 배워보자.
조건문에는 크게 if문, switch case문 두가지가 있는데, 이 두 조건문으로 프로그램의 흐름을 조절할 수 있다.
if문
먼저 if문에 대해서 배워보자.
if문을 사용해서 미성년자인지 성인인지 구별하는 프로그램이다.
#include <iostream>
using namespace std;
int main()
{
int age;
age = 20;
if (age <= 19)
{
cout << "미성년자입니다.\n";
}
else
{
cout << "성인입니다.\n";
}
return 0;
}
age의 값이 20이기 때문에 age <= 19는 false가 되기 때문에 "성인입니다"가 항상 출력된다.
그리고 if문에는 else문이 필수는 아니기 때문에 없어도 상관은 없다.
다음으로는 else if문을 알아보자.
else if문은 if문 다음에 조건을 또 걸고 싶을 때 사용한다.
예제를 보고 이해해보자.
#include <iostream>
using namespace std;
int main()
{
int age;
age = 19;
if (age <= 18)
cout << "미성년자입니다\n";
else if (age == 19)
cout << "조금만 있으면 성인입니다.\n";
else
cout << "성인입니다.\n";
return 0;
}
만약 조건문 코드가 한 줄 이라면 이렇게 괄호를 생략해서 사용할 수 있다.
한 if문에서 if와 else는 한 번씩 밖에 못 쓰지만 else if는 얼마든지 사용할 수 있다.
else if를 분해해서 보면 다음과 같다.
if ( age >= 20 )
cout << "성인입니다.\n";
else if ( female == true )
cout << " 성인이 아니면서 여성입니다.\n";
if ( age >= 20 )
cout << "성인입니다.\n";
else
{
if ( female == true )
cout << " 성인이 아니면서 여성입니다.\n";
}
두 if문은 동일한 동작을 하고 있다.
이제 전에 배웠던 논리 연산자를 통해 표현해보자.
if ( age >= 20 )
cout << "성인입니다.\n";
if ( !(age >= 20) && female == true)
cout << "성인이 아니면서 여성입니다.\n";
세 if문 모두 동일한 동작은 한다.
switch / case
if문은 bool 타입의 입력을 받아서 true, false에 따라서 다른 코드를 실행해준다.
switch / case문은 정수 타입의 입력을 받아서 그 값에 따라 다른 코드를 실행해준다.
3점 만점의 시험에서 점수에 따라 다른 문장을 출력해주는 프로그램의 예제이다.
#include <iostream>
using namespace std;
int main()
{
int score = 2;
switch(score)
{
case 0:
cout << "망했어요.\n";
break;
case 1:
cout << "반도 못넘었어요.\n";
break;
case 2:
cout << "좀 잘했네요.\n";
break;
case 3:
cout << "훌륭합니다.\n";
break;
}
return 0;
}
2점에 맞는 문장이 잘 출력된 것을 볼 수 있다.
여기서 switch / case의 입력은 변수여야 하고 case 뒤에 오는 값은 무조건 상수여야 한다는 점을 기억하자.
break
그런데 여기서 case가 끝날 때마다 break; 라는 문장이 있다.
break는 조건문이나 반복문에서 탈출할 때 쓰는 예약어이다.
만약 break;를 쓰지 않으면 어떻게 될까?
실험해보자.
#include <iostream>
using namespace std;
int main()
{
int score = 2;
switch(score)
{
case 0:
cout << "망했어요.\n";
case 1:
cout << "반도 못넘었어요.\n";
case 2:
cout << "좀 잘했네요.\n";
case 3:
cout << "훌륭합니다.\n";
}
return 0;
}
case 2를 실행한 뒤 멈추지 않고 끝까지 실행한 것을 볼 수 있다.
break문을 만나기 전까지, break가 없다면 switch / case 문 끝까지 실행한다.
default
그런데 만약 score에 0,1,2,3 이외의 값이 들어오면 어떻게 될까?
이렇게 case에 없는 값을 처리해주기 위해 default가 존재한다.
잘못된 입력 값이 들어왔을 때의 예제를 보자.
#include <iostream>
using namespace std;
int main()
{
int score = 4;
switch(score)
{
case 0:
cout << "망했어요.\n";
break;
case 1:
cout << "반도 못넘었어요.\n";
break;
case 2:
cout << "좀 잘했네요.\n";
break;
case 3:
cout << "훌륭합니다.\n";
break;
default:
cout << "점수가 이상합니다.\n";
}
return 0;
}
여기서 만약 default 밑에 case가 더 있다면 break를 넣어주어야 하겠지만 일반적으로 default가 맨 밑에 위치하기 때문에 넣지 않았다.
이제 case를 붙여서 사용해보자.
score가 만점일 때만 다른 문장을 출력하는 예제이다.
#include <iostream>
using namespace std;
int main()
{
int score = 1;
switch(score)
{
case 0:
case 1:
case 2:
cout << "좀 더 노력하세요.\n";
break;
case 3:
cout << "훌륭합니다.\n";
break;
default:
cout << "점수가 이상합니다.\n";
}
return 0;
}
0, 1, 2 모두 같은 결과가 나온다는 것을 알 수 있다.
if? switch / case?
앞의 예제를 보면 알겠지만 모든 switch / case문은 if문으로 변형이 가능하다.
그렇다면 어떨 때에 어떤 조건문을 사용해야 할까?
switch / case문은 한 변수가 있을 때 이 변수의 값에 따라서 서로 다른 일을 할 때 사용한다.
그 외의 경우는 if문을 사용하면 된다.
삼항 연산자
if문을 사용한 간단한 예제가 있다.
if (a > b)
c = a;
else
c = b;
이 코드를 삼항 연산자를 사용하면 한 줄로 표현이 가능하다!
c = a > b ? a : b;
? 앞에 조건이 오고 : 앞에 참일 때 실행할 코드, 뒤에는 거짓일 때 실행될 코드가 온다.
훨씬 코드가 짧아지니 필요한 상황에 사용해보자!
goto
프로그램을 만들다 보면 이 코드의 위치로 뛰어넘어야 할 필요를 느낄 때가 있다.
그럴 때 사용하는 명령어가 goto이다.
긴말이 필요없다. 바로 예제를 보자.
#include <iostream>
using namespace std;
int main()
{
goto Cppzoa;
cout << "C++ 시러\n";
Cppzoa:
cout << "C++ 조아!\n";
return 0;
}
잘 건너 뛴 것을 볼 수 있다.
하지만 goto문을 남용하게 되면 소스 코드를 읽기 힘들어지고, 관리하기도 힘들어진다.
goto를 적절히 사용해서 코드가 간결해지고 이해하기 쉬워지면 상관이 없지만 너무 많이 쓰진 말자.
다음 글에서는 반복문에 대해서 배워보자.
'C++ 기본 문법 알아보기' 카테고리의 다른 글
8장. 배열에 대하여 (0) 2019.01.11 7장. 반복문 (0) 2019.01.10 5-2장. 비트 단위 연산자와 연산자 마무리 (0) 2019.01.08 5-1장. 기본적인 연산자 (0) 2019.01.07 4장. 형변환이란? (0) 2019.01.06