c switch

떵떵·2022년 6월 11일
0

c에는 조건문의 결과에 따라 실행하는 것이 if문 뿐만아니라 switch분기문으로도 다양한 조건을 처리할 수 있다.

  • switch 분기문은 항상 case와 함께 사용
  • 변수에 지정한 값이 case에 지정한 값과 일치하면 코드 실행
  • 아무 case에도 해당하지 않으면 default의 코드를 실행(default는 생략가능) switch 분기문은 형식이 균일하며 처리해야 할 조건이 많을 때 사용한다.
    int main()
    {
    	switch (num1)
       {
    	case 1: //콜라 버튼
       	콜라를 내보냄
       	breakl;
       
       case 2: //사이다 버튼
       	사이다를 내보냄
       	breakl;
       
       case 3: //환타 버튼
       	환타를 내보냄
       	breakl;
       
       default:
       	제공하지 않는 메뉴
           break;
    }

if, else if는 여러 조건식을 처리할 수 있지만 매번 조건식을 설정해줘야 해서 번거롭다. switch분기문은 조건이 많아도 손쉽게 처리 가능!

하지만, switch 분기문에는 조건식은 바뀌지않고 값만 바뀔 때 switch가 적합하다.

### case 안에서 변수 선언하기
switch문을 쓰면서 코드가 길어지면 case에 필요한 변수를 선언할 필요가 있을 수 있다.

int main()
{
switch (num1)
{
case 1:
{
int num2 = num1;
printf("%d 입니다.\n", num2);
break;
}
case 2:
printf("2 입니다.\n");
break;
case 3:
printf("3 입니다.\n");
break;
default:
printf("defaul");
break;
}
}

case에 변수를 선언하려면 중괄호{}로 묶어주면 된다.
단, 중괄호 안에 선언된 변수는 case 1: 안에서만 사용할 수 있고 그외 바깥에서는 사용할 수 없다.

### switch에서 판별 가능한 자료형
switch에서는 정수형과 문자형만 사용가능하다. 문자형 char은 정수형으로 사용할 수 있는 것처럼 'a'를 넣어도 아스키코드로 정수로 저장되어 있기 때문에 사용가능하다.

int main()
{
swtich (chr1)
{
case 'a':
printf("a 이다.");
break;
case 'b':
printf("b 이다.");
break;
default:
printf("default");
break;
}
}

이처럼 chr1에 문자형 'a'가 입력되어도 case문은 정상작동 한다. 하지만,
case "hello": 처럼 문자열을 사용할 수는 없다.
        
       

### 주의
case에는 반드시 값(리터럴)이 와야하며 조건식이나 변수를 지정할 수 없다.
또한, 값 지정 후 :(콜론)을 붙여 준 뒤 실행할 코드를 작성해야 한다.

#### break;가 없을때
case문에 값과 실행할 코드를 설정하고 마지막에 break;문을 꼭 넣어줘야 한다.
break;문이 없는 switch문은 조건식에서 나온 리터럴에 해당하는 case문이 실행되고나서 그 다음 case, default문이 계속 실행된다.
이러한 상황을 fall through라고 부르며 "구멍 사이로 떨어지다"에서 유래한다

### breakl 생략 응용
위에서 break;가 없을 때 fall through가 발생하여 예기치못한 결과가 나온다고 하였다. 하지만 이를 응용하여 프로그래밍 할 수도 있다.

int main()
{
switch (num)
{
case 1:
case 2:
printf("1또는 2 입니다.");
break;
case 3:
case 4:
printf("3또는 4 입니다.");
break;
default:
printf("default");
break;
}
}

위와같이 코딩 할 경우 입력값:1 일때 case 1 지나치고 case 2가 실행되어 "1또는 2 입니다"가 실행되며 자주 사용하는 방법이기도 하다.

위와같은 코드를 if문, else if문으로 한다면 조건식 마다 논리연산자(||)를 사용하며 작성해야 하기 때문에 코드가 길어질수록 매워 번거로워진다.

0개의 댓글