if문 중첩
- 어떤 조건을 검사하기 전에 선행조건이 있다면 if문 안에 if문을 넣어서 사용
/*
* 중첩된 if문
*/
#include <stdio.h>
int main(void)
{
int a = 20, b = 10;
if (a > 10) // a가 10보다 크면 13 ~ 20행 실행, 작거나 같으면 22행으로 이동
{
if (b >= 0)
{
b = 1; // b가 0 이상이면 b에 1 대입하고 22행으로 이동
}
else
{
b = -1; // b가 0 미만이면 b에 -1 대입하고 22행으로 이동
}
}
printf("a : %d, b : %d\n",a , b);
return 0;
}
if문을 중첩해서 쓰는 이유
- 선행조건이 있으면 불필요한 조건검사를 하지 않음.
- 선행조건이 없어도 실행 효율을 위해 의도적으로 중첩해 사용가능
- 분할 정복 기법
- 비교 항목이 많은 경우 if문을 여러 번 중첩해서 쓰면 실행시간 감소하는데 도움
- 분할 정복 기법
else 결합 문제
- if ~ else문 안에 단독으로 if문을 쓸 때는 반드시 중괄호를 붙여줌.
/*
* 중첩된 if문에서 중괄호가 반드시 필요한 경우
*/
#include <stdio.h>
int main(void)
{
int a = 10, b = 20;
if (a < 0) // a가 0보다 작지만
{
if (b > 0) // b가 0보다 크면 ok 출력
{
printf("ok");
}
}
else // a가 0 이상이면 ok 출력
{
printf("ok");
}
return 0;
// 실행결과 ok
}
- 문법적으로 12행과 17행의 중괄호는 생략할 수 있으나 직접 주석 처리 후 실행하면 전혀 다른 구문으로 해석함.
- 컴파일러는 if문이 중첩된 경우 else를 가장 가까운 if와 연결.
- 따라서 18행의 else를 13행의 if와 짝을 지어 기본 if문 안에 실행문으로 해석함.
- 이 경우 11행의 조건이 거짓이 되므로 아무것도 출력하지 않음.
'C언어 > Study' 카테고리의 다른 글
[C언어 공부] while문 (0) | 2024.08.16 |
---|---|
[C언어 공부] switch ~ case문 (0) | 2024.08.14 |
[C언어 공부] if ~ else if ~ else문 (0) | 2024.08.14 |
[C언어 공부] if ~ else문 (0) | 2024.08.14 |
[C언어 공부] if문 (0) | 2024.08.14 |