2024. 2. 29. 17:18ㆍProgramming Language/C++
아래 링크 클릭 시 해당 본문으로 이동
제어문(Control Flow Statement)
• 프로그램에서 원하는 결과를 얻기 위해 순차적인 흐름을 제어하는 구문이다.
• 코드는 위에서 아래로 순차적으로 진행되는데, 제어문은 코드의 실행 순서를 제어할 수 있다.
• 제어문 종류 : 조건문, 반복문
조건문(Conditional Statements)
• 주어진 조건에 따라 코드의 실행 여부를 결정할 수 있게 하는 문장
`if` : 만약 ~라면
`else if` : 그게 아니고 ~라면
`else` : ~가 아니라면, 다 아니라면
1. if문
if(조건식1)
{
// 조건식1이 참이면 실행
}
▷ 예시 1
#include <iostream>
int main()
{
int a = 0;
// &&은 둘 다 참이면 참이고, 논리식에서 0이 아닌 모든 수는 참이다.
if (100 && 200)
{
a = 100;
}
cout << a; // 100
return 0;
}
▽ 출력 결과
100
▷ 예시 2
#include <iostream>
int main()
{
int a = 0;
// `&&`은 하나라도 거짓(false)이고, 논리식에서 0은 거짓(false)이다.
if (0 && 200)
{
a = 100;
}
// a는 100이 아니기 때문에 아래 if문은 실행되지 않는다.
if (a == 100)
{
a = 300;
}
cout << a; // 0
return 0;
}
▽ 출력 결과
0
실행되지 않는 조건식은 Debug 모드일 때는 문제가 없지만 Release 모드일 때는 존재하지 않는 코드가 될 수도 있다.
솔루션 구성
• Debug 모드 : 하나씩 다 수행시켜 준다.
• Release 모드 : 최적화 옵션이 켜진다. ➜ 코드가 존재하지 않게 될 수도 있다.
2. if - else문
if (조건식1)
{
// 조건식1이 참이면 실행
}
else
{
// 조건식1이 거짓이면 실행;
}
▷ 예시
#include <iostream>
int main()
{
int a = 0;
// if문
if (0 && 200) // 거짓
{
a = 100;
}
// a는 0이다.
// if - else문
if (a == 100) // 거짓
{
a = 300;
}
else
{
a = -10;
}
cout << a; // -10
return 0;
}
▽ 출력 결과
-10
3. if - else if - else문
if (조건식1)
{
// 조건식1이 참이면 실행
}
else if (조건식2)
{
// 조건식1이 거짓이고 조건식2가 참이면 실행
}
else
{
// 조건식이 모두 거짓이면 실행
}
• `else if`는 여러 개 사용 가능
만약 `else`가 아예 없다면 모든 조건이 거짓일 때 아무것도 실행되지 않는다.
▷ 예시
#include <iostream>
int main()
{
int a = 0;
// if문
if (0 && 200) // 거짓
{
a = 100;
}
// a는 0이다.
// if - else if - else문
if (a == 100) // 거짓
{
a = 300;
}
else if (a == -50) // 거짓
{
a = -10;
}
else
{
a = 60;
}
cout << a; // 60
return 0;
}
▽ 출력 결과
60
4. switch문
switch (조건값)
{
case x1:
// 조건값이 x1이면 실행
break;
case x2:
// 조건값이 x2이면 실행
break;
…
case xn:
// 조건값이 xn이면 실행
break;
default:
// 조건값에 맞는 case가 하나도 없으면 실행
break;
}
• `break` : switch문의 중괄호를 벗어나 switch문을 탈출한다.
▷ 예시
#include <iostream>
int main()
{
int a = 10;
// switch문
switch (a) // 조건값은 10이므로 case 10에 해당한다.
{
case 10: // 실행
a = 5;
break; // switch문 탈출
case 20:
a = -2;
break;
default:
a = 0;
break;
}
cout << a; // 5
return 0;
}
▽ 출력 결과
5
모든 case에 `break;`가 없어도 오류가 발생하지 않고, `default`까지 쭉 코드가 진행이 되고 switch문이 끝난다.
조건값에 맞는 case에 `break;`가 없어도 오류가 발생하지 않는 이유는 case끼리 묶을 때처럼 의도적으로 break를 안 쓰는 경우가 있기 때문이다.
▷ 조건값이 10, 20, 30 중에 있다면 해당 case 실행
#include <iostream>
int main()
{
// switch문
int a = 30;
switch (a) // 조건값은 30이기 때문에 case 30이 실행된다.
{
// case가 10 또는 20 또는 30일 때
case 10:
case 20:
case 30: // 실행
a = 100;
break; // switch문 탈출
default:
a = -80;
break;
}
cout << "a = " << a << endl; // a = 100
// if - else문
int b = 30;
if (b == 10 || b == 20 || b == 30) // 실행
{
b = 100;
}
else
{
b = -80;
}
cout << "b = " << b; // b = 100
return 0;
}
▽ 출력 결과
a = 100
b = 100
switch문 ⇄ if - else if - else문
▷ 예시
ⓐ switch문
#include <iostream>
int main()
{
// switch문
int a = 20;
switch (a) // 조건값은 20이기 때문에 case 20이 실행된다.
{
case 10:
a = 5;
break;
case 20: // 실행
a = -2;
break;
default:
a = 0;
break;
}
cout << a; // -2
return 0;
}
ⓑ if문 (if - else if - else)
#include <iostream>
int main()
{
// if - else if - else문
int a = 20;
if (a == 10)
{
a = 5;
}
else if (a == 20) // 실행
{
a = -2;
}
else
{
a = 0;
}
cout << a; // -2
return 0;
}
switch문에서 if문으로, if문에서 switch문으로 바꾸는게 항상 가능한 것은 아니다.
switch문과 if문은 문법적으로 큰 차이가 없지만 서로 바꿀 수 없는 상황이 있다.
① (변수나 특정 값을 넣는 등) 복잡한 경우 ➜ switch문으로는 표현이 힘든 경우가 있다.
② 조건이 길어지는 경우 ➜ if문은 조건이 너무 길어지면 switch문보다 가독성이 떨어진다.
무조건 무엇을 써야 되는 것은 아니므로 프로그래머의 코딩 방식과 특정 상황에 맞게 쓰면 된다.
삼항 연산자(Ternary Operator)
조건식 ? 참이면 반환 : 거짓이면 반환
• if - else문을 간략하게 쓰고 싶을 때 사용
삼항 연산자 ⇄ if - else문
▷ 예시
ⓐ 삼항 연산자
#include <stdio.h>
int main()
{
d = 30;
d == 30 ? d = 100 : d = -80; // 100(변수 d는 30으로, 참이다.)
return 0;
}
ⓑ if - else문
int d = 30;
if (d == 30)
{
d = 100;
}
else
{
d = -80;
}
삼항 연산자는 코드를 한 줄로 줄이는 등의 특별한 목적이 아니라면 가독성이 좋지 않기 때문에 굳이 삼항 연산자를 쓸 필요는 없다.
※ 코드가 길어져도 가독성 있게 쓰는 것이 더 좋다.
'Programming Language > C++' 카테고리의 다른 글
[C++] 함수[main()], return, void (0) | 2024.03.03 |
---|---|
[C++] 메모리 영역, 변수 (0) | 2024.03.02 |
[C++] 연산자(Operators), 전처리기[#define], 연산자 우선순위 (0) | 2024.02.29 |
[C++] 자료형(Data Type) - 정수형, 실수형 (0) | 2024.02.26 |
[C++ STL] STL, 스택(Stack), 큐(Queue) (0) | 2024.02.26 |