선택적 실행이 가능한 코드를 구현할 때 조건문을 사용합니다.


if, if~else, if~if else~else

if

if(num1 > num2)

printf("num1이 num2보다 크다 \n");


if문은 위와 같이 조건을 소괄호로 표시합니다. 이때 해당하는 경우에만 if문이 실행되어 그에 대한 진행이 이루어 집니다.


else

키워드 else는 if와 달리 독립적으로 사용할 수 없습니다. if의 조건이 참이 아닐 경우에만 실행됩니다.

if(조건1)

{

// 조건 1 만족 시 실행

}

else

{

//조건 1을 제외한 모든 경우

}


else if

if만을 사용할 경우 매번 조건을 확인하며 넘어가야합니다. 하지만 else if를 사용하는 경우 여러 조건 중 한 가지를 만족하면 나머지를 모두 건너뛴다는 장점이 있습니다.

if(조건1)

{

//조건1 만족한 경우

]

else if(조건2)

{

//조건 2 만족한 경우

}

.........................

else

{

//앞의 모든 조건을 불만족한 경우

}

이를 정리하면 다음의 특징을 알 수 있습니다.

  • 조건의 만족여부 검사는 위에서 아래로 진행됩니다.
  • 조건이 만족될 경우 해당 블록을 실행하고 나면 마지막 else까지 건너뜁니다.


조건 연산자: 피 연산자가 세 개인 '삼 항 연산자'

if~else문을 일부 대체할 수 있는 조건 연산자입니다. 피연사자의 수가 세 개이기 때문에 삼 항 연산자라 부르기도 합니다. 


조건 ? data1 : data2;


이와 같이 사용합니다. 즉, 조건 연산자는 기호 ? 와 기호 : 으로 이뤄집니다. 이렇듯 두 개의 기호가 서로 떨어져서 하나의 연산자를 구성하기 때문에 피 연산자를 3개까지 둘 수 있습니다. 위의 예를 해석해보면 조건이 참이면 data1이 반환되고, 조건이 거짓이면 data2가 반환됩니다. 


int num3 = num1>num2 ? num1 : num2;


이렇게도 사용이 가능합니다. 이 경우, 대입 연산자보다 조건 연산자의 우선순위가 높아 조건 연산자가 먼저 진행됩니다.


continue&break

break

break는 가장 가까이서 감싸고 있는 반복문 하나를 빠져 나오게 됩니다. 하지만 break문이 if문과 함께 썼을때 빠져 나오는 동작을 진행하는 것은 아닙니다.


continue

이 경우는 break와 반대로 계속적인 진행을 하도록 만들어줍니다. continue가 입력된 조건을 만족하는 경우 다시금 조건 검사로 이동을 시킵니다.


int main(void)

{

.......

while(1)

{

if(x > 20)

break;        // 조건문을 종료합니다.

if(x/2 == 1)

continue;    // 조건문을 계속 진행합니다.


switch

if...else if...else문과 유사한 측면이 있습니다. 하지만 if문에 비해 제한적입니다.


switch(num)

{

case 1:

printf("hello \n");

break;    //해당 조건에서 빠져나온다.

case 2:

printf("World \n");

break;

default:

printf("Bye \n");

}


보면 알 수 있듯 num은 switch문으로 전달되는 인자 정보입니다. 이는 정수형 변수이어야 하는데, 대표적으로 int형 변수가 위치하게 됩니다. 그리고 저장된 값에 따라서 실행할 영역이 결정됩니다.

위의 예를 보면 알 수 있듯이 해당되는 인자의 case가 실행이 되며, 입력된 num의 값이 해당 case값과 일치하는게 없을 때 if문의 else와 같이 실행이 됩니다. 그리고 중간중간에 보이는 break문은 해당 조건에서 빠져나오는 역할을 진행합니다. 만약 break문이 없다면 계속해서 case를 확인하고 마지막에 default문을 실행하게 됩니다.


goto

그 이름이 의미하듯이 프로그램의 흐름을 원하는 위치로 이동시킬 때 사용하는 키워드입니다. 하지만 goto문에 대해선 부정적으로 봅니다. 이는 프로그램의 자연스러운 흐름을 방해한다는 것 때문입니다. C언어와 같은 절차지향 프로그래밍 언어에서 프로그램의 흐름을 방해하거나 복잡하게 하는 것은 아주 큰 단점이 됩니다. 그리고 goto를 굳이 써야하는 경우가 딱히 존재하지도 않습니다. 


int main(void)

{

....

rabbit;                 // 위치지정에 사용된 rabbit이라는 레이블

...

goto rabbit;    //레이블 rabbit의 위치로 이동

}



'배울 것들 > 언어' 카테고리의 다른 글

C프로그래밍 9/? 배열  (0) 2018.11.20
C프로그래밍 8/? 함수  (0) 2018.11.20
C프로그래밍 6/? 반복문  (0) 2018.11.19
C프로그래밍 5/? 자료형  (0) 2018.11.13
C프로그래밍 4/? 자료형  (0) 2018.11.11

+ Recent posts