프로그래밍/C

[C언어 강좌-8] 조건문 (IF, SWITCH)

Peter Ahn 2018. 4. 12. 16:10
반응형


안녕하세요 피터입니다.

오늘은 C언어의 조건문에 대해 알려드리겠습니다.


주어진 조건에 따라 분기한다고 해서 분기문이라고도 하는데요, 아래와 같이 크게 세가지 종류가 있습니다.

  • If / Else
  • Switch / Case
  • ? operator

동작 원리는 거의 같지만 가독성이나 코드의 유연성을 고려하여 상황에 따라 적절하게 사용하시면 됩니다.


1. If / Else

if 구문의 기본적인 문법은 다음과 같습니다.

if(condition)
  statement;

위 코드를 "만일(if) 조건이 만족하면 statement를 실행하시오." 라고 이해하시면 됩니다.

조건이 만족하는 기준은 condition이 참(true)가 되는 경우입니다.
C언어에서 조건문의 참(true)은 0이 아닌 모든 수가 해당되며,
반대가 되는 거짓(false)는 0입니다.

따라서 if(1) 은 참이 되고, if(100)도 참이 됩니다.
오로지 if(0)인 경우에만 해당 statement가 실행되지 않습니다.
의미를 분명하게 하기 위해 아래와 같이 상수로 정의하여 사용하기도 합니다.

#define TRUE  1
#define FALSE 0

if(TRUE)
  statement;


그렇지만 일반적으로 condition 들어가는 구문은 아래와 같이 비교 구문이 대부분입니다.
else 구문은 if(condition)이 만족하지 못하는 모든 경우에 실행됩니다.
if(age >= 19)

   printf("You are adult\n");
else
printf("You are minor\n");


분기해야 할 조건이 여러개인 경우에는 아래와 같이 else if 구문을 사용할 수 있습니다.


if(type == 1)
  printf("Text type\n");
else if(type == 2)
  printf("Image type\n");
else if(type == 3)
  printf("Video type\n");
else
  printf("nvalid type\n");


2. Switch / Case

Switch-Case 구문의 기본 문법은 아래와 같습니다.

switch(variable)
{
  case value1:
    statement;
    break;
case value2: statement; break;
 default: statement; }

swich 구문에서 분기에 사용할 변수(variable)를 설정한 뒤 case 구문에서 각 value에 대한 루틴을 설정하면 분기합니다.

주의하셔야 할 부분은 case 구문에서 break; 구문인데요. break 를 쓰지 않으면 밑에 있는 case 구문까지 실행이 되어버리니 의도하지 않은 결과가 나올 수 있습니다.

아래 예제는 위의 if-else 구문으로 되어 있는 코드를 switch-case 구문으로 변환한 코드입니다. 참고해주세요~

switch(type)
{
  case 1:
    printf("Text type\n");
    break;
  case 2:
    printf("Image type\n");
    break;
  case 3:
    printf("Video type\n");
    break;
  default:
    printf("Invalid type\n");
}


3. ? operator

? (물음표) 연산자는 3개의 항이 요구되기 때문에 "삼항연산자" 라고도 불리며, 조건식을 수행하기 때문에 "조건부연산자" 라고도 합니다.

좀 더 단순하게 활용이 가능한데요. 기본 문법은 다음과 같습니다.

(condition)?a:b;

boolean 값을 갖는 조건식(condition) 뒤에 ? 연산자가 오고 그 뒤에 A:B 와 같이 콜론(:)으로 구분되는 값이 2개 오게 됩니다.

조건식의 결과가 참(True)인 경우 연산의 결과가 a 가 되구요, 거짓(False)인 경우 b가 되게 됩니다.

아래 예제와 같이 활용하면 코드를 좀 더 단순화 할 수 있습니다.

printf("%s\n", (age>=19)?"Adult":"Minor");


여러분의 댓글은 저에게 크나큰 힘이 됩니다. 오류 및 의견 주시면 감사하겠습니다.

-Peter의 우아한 프로그래밍


반응형