1. if, if else, if else if else
- 내가 작성한 소스코드가 전부 실행되는 것이 아니라 조건에 따라 실행되거나 실행되지 않게끔 해야할 경우가 있다.
- 이럴 때 사용하는 기본적이고 대표적인 문법이 if와 else를 사용하는 문법이다.
- if 는 ()안에 있는 식을 검사하여 true에 해당하면 {}에 있는 코드를 수행하고 false에 해당하면 수행하지 않는다.
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
if (a > 0)
{
printf("it's true!\n");
}
if (a > 20)
{
printf("it's false!\n"); //이 문장은 출력되지 않는다.
}
}
더보기
//출력결과
it's true
- 만약 실행 시킬 문장이 한 문장이라면 {}를 생략할 수 있다.
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
if (a > 0)
printf("it's true!\n"); // 결과는 동일하다
}
- else는 함께 있는 if 문의 조건이 거짓일 때, 대신 동작하는 코드를 넣을 수 있다.
- 또한 else 에는 조건이 들어가지 않는다.
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
if (a > 20)
{
printf("it's false!\n"); //이 문장은 출력되지 않는다.
}
else
{
printf("a is less than 20\n") //이 문장이 대신 출력된다.
}
}
- 마찬가지로 실행할 문장이 한 줄일 경우 {}를 생략할 수 있다.
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
if (a > 20)
printf("it's false!\n"); //이 문장은 출력되지 않는다.
else
printf("a is less than 20\n") //이 문장이 대신 출력된다.
}
- else if 를 통해서 보다 다양한 조건 분기를 만들 수 있다.
- 마찬가지로 실행할 명령이 한 줄이라면 중괄호를 생략할 수 있다.
- else는 반드시 존재하지 않아도 된다.
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
if (a > 0)
printf("it's true!\n");
else if (a >= 10)
printf("it's also true!\n");
else
printf("it's false!\n"); //이 문장은 출력되지 않는다.
}
// 위 코드와 아래 코드는 실행 결과가 같다.
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
if (a > 0)
printf("it's true!\n");
else if (a >= 10)
printf("it's also true!\n");
}
1-1. if else 문에서 중괄호 생략시 주의할 점
- 위에서 조건문 안에 실행시킬 문장이 한 줄이라면 중괄호가 생략이 가능하다고 했으나 반드시 붙여야 하는 순간이 있다.
- 컴파일러는 if 문이 중첩되어 있으면 else를 가장 가까운 if와 매칭시킨다고 한다.
- C에서는 컴파일러가 ; 단위로 코드를 한 문장으로 인식한다.
- 즉 아래 코드에서 중괄호를 모두 삭제한다면 아무리 동일한 길이의 탭으로 구분한다 하더라도 else와 가장 가까운 if 가 하나의 if else 문으로 묶이게 된다.
- 최종적으로 if (a == 0) 조건을 만족하지 않을 때, 하나로 묶인 if else 문이 실행되지 않고, 그 어느것도 출력하지 못하고 프로그램이 종료하게 된다.
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
if (a == 0)
{
if (b == 20)
printf("b is 20!!\n");
}
else
{
printf("printf!\n"); //이 문장이 출력된다.
}
}
// 아래코드 처럼 중괄호를 삭제하면 if (b == 20)과 else가 하나의 if else 문으로 묶인다.
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
if (a == 0) // 이 조건이 거짓이므로 프로그램이 종료된다.
if (b == 20)
printf("b is 20!!\n");
else
printf("printf!\n");
}
2. switch case 문
- if else if else if.... 처럼 if 문의 분기가 매우 많아 질 때, 좀 더 가독성 좋게 표현할 수 있는 문법이 switch ~ case 이다.
- if에서 조건을 넣는 것 처럼 switch에 조건을 넣고 각 조건의 분기를 case로 나누어 실행한다.
- 또한 switch ~ case의 switch 에는 조건식으로 정수식만을 사용해야 한다.
- 의사코드는 아래와 같다.
switch(조건문)
{
case 어떤식1:
실행문1;
break; (추후 설명)
case 어떤식2:
실행문2;
break;
default:
실행문3;
break;
}
- 만약 조건식의 결과가 어떤식1과 동일하다면 실행문1이 실행되고, 어떤식2와 동일하다면 실행문2가 실행된다.
- 만약 case에 부합하는 결과가 존재하지 않는다면 default의 실행문3가 실행된다.
2-1. 예제로 보는 switch ~ case문
- C에서 switch case문은 switch 안에 있는 조건을 확인한 뒤 해당 case로 이동한다.
- 그 후 break; 를 만날 때까지 아래로 내려오면서 모든 코드를 실행한다!!
- 그래서 break를 적재적소에 넣어주는 것이 매우 중요 하다.
#include <stdio.h>
int main()
{
int condition = 2;
int res = 0;
switch(condition) // condition 값은 2이므로 case에 2가 있는 지 찾는다.
{
case 1:
res = 1;
break;
case 2: // condition값인 case가 존재하므로
res = 2; // res에는 2가 할당되고 break 로 switch ~case문을 빠져나온다.
break;
case 3:
res = 3;
break;
default:
res = -1;
break;
}
printf("res is : %d\n", res); // condition 값인 2가 출력된다.
}
- 만약 break; 문을 의도대로 놓지 않는다면 의도하지 않은 결과를 확인하게 될 수도 있다.
- 아래 코드 처럼 case상관하지 않고 아래로 내려가면서 모든 결과를 반영하는 것을 알 수 있다.
#include <stdio.h>
int main()
{
int condition = 2;
int res = 0;
//결과의 차이를 좀 더 확실하게 보기 위해 연산자를 += 로 바꿨다.
switch(condition) // condition 값은 2이므로 case에 2가 있는 지 찾는다.
{
case 1:
res += 1;
case 2: // condition값인 case가 존재하므로 여기로 온다
res += 2; // res에는 2가 더해지고 break가 없으므로 아래로 내려간다.
case 3:
res += 3; // 아래로 내려와 3이 더해진다. res는 5가 된다.
default:
res += -1; // 아래로 계속 내려와 -1이 더해진다. res는 4가 된다.
}
printf("res is : %d\n", res); // res 값인 4가 출력된다.
}
2-2. default의 위치
- 보통 다른 코드들을 보더라도 default는 switch ~ case문에 가장 아래에 위치한 경우가 대부분인데
- default의 위치는 딱히 정해져있지 않다. + 필수로 존재해야 하지도 않다.
#include <stdio.h>
int main()
{
int condition = 5;
int res = 0;
switch(condition) // 컴파일러는 condition의 case가 있는지를 우선적으로 찾고 만약 없다면
{ // 바로 default로 이동한다
default: // condition에 부합하는 case가 없으므로 default의 실행코드가 실행된다.
res += -1;
break;
case 1:
res = 1;
break;
case 2:
res += 2;
break;
case 3:
res += 3;
break;
}
printf("res is : %d\n", res); // res 값인 -1이 출력된다.
}
- 만약 default가 없다면 switch 문을 바로 빠져나와 res의 초기값인 0이 출력된다.
'Language > C' 카테고리의 다른 글
혼공C (7장) - C 함수 기초, 혼공C 7장 실전예제 (0) | 2024.03.22 |
---|---|
혼공C (6장) - 반복문 (while, do while, for) (0) | 2024.03.20 |
혼공C (4장) - 연산자 (형변환, sizeof, 복합대입, 비트연산) (0) | 2024.03.08 |
혼공C (3장) - 변수와 scanf를 사용한 데이터 입력 (1) | 2023.11.28 |
혼공C (2장-기초) - printf 함수, 제어 문자, 변환 문자 (0) | 2023.07.30 |