선택적 실행이 가능한 코드를 구현할 때 조건문을 사용합니다.
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 |