나의 IT일지
조건문(switch문) 본문
제어문은 소스코드의 흐름순서에 영향을 주는 문법으로, 조건문이 제어문의 일종이다. 조건문에는 if문과 switch문이 있는데, if문에 대해서는 다음 링크를 통해 들어가면 되며, 이 글에선 switch문에 대해서 알아볼 것이다.
조건문 - switch문
조건문을 간단히 설명하면, 조건에 따라 명령 문장이 바뀌는 문법이다. if문에선, 결과값이 참과 거짓을 갖는 비교 연산자와 논리 연산자가 조건으로 사용되는데, switch문은 무엇을 조건으로 사용할까?
switch문은 변수의 값이나 수식(연산자로 만든 식)의 값을 조건으로 한다. switch문의 구조식과 순서도를 한번 보자.
구조식 |
switch(변수 혹은 수식){ case 값1: 변수or수식==값1일때 실행할 명령1; break; case 값2: 변수or수식==값2일 때 실행할 명령2; break; ... default: 모든 case 의 값이 아닐 경우 실행할 명령; } |
이때 변수나 수식의 결과값은 항상 정수값, 문자, 문자열이여야 한다. 왜냐하면 case에 사용되는 값의 형태는 정수,문자,문자열이기 때문에, 변수의 결과값(수식의 결과값)은 무조건 정수,문자,문자열여야 한다.
순서도를 보면, 변수의 결과값(수식의 결과값)이 case의 값이 같을 경우에, 그 case에 포함되어 있는 명령을 수행한다. 예를 들면, 변수의 값이 값1이라고 하면, case 값1에 포함되어 있는 명령어가 수행하게 된다.
좀 더 쉬운 이해를 위해, 예시를 한번 보도록 하자.
#include<stdio.h>
void main() {
int a;
printf("점수 입력:");
scanf("%d", &a);
switch(a/10){
case 10:
case 9:
printf("Grade A"); //case 10일때, case 9일때 Grade A를 출력
break;
case 8:
printf("Grade B");
break;
case 7:
printf("Grade C");
break;
case 6:
printf("Grade D");
break;
default:
printf("Grade F");
break;
}
}
만약, 점수입력으로 95를 입력하게 되면, switch문에 사용되는 수식의 결과값은 9.5가 되며, 정수만 취급하기에, 9로 취급하게 된다. 즉, case 9에 있는 명령문을 실행이 된다.
위의 코드를 보면, case 10에 아무 명령문이 적혀있지 않는것을 확인할 수 있다. 그렇다면 점수입력을 100으로 하면, 아무것도 출력이 안 되는 것인가? 한번 확인해 보자.
결과를 보면 "Grade A"를 출력하는 것을 확인할 수 있다. 왜 "Grade A"를 출력하는 것일까? case 10에서 시작이 된것이며, case 9인 printf("Grade A")를 통해 "Grade A"가 출력된 것이다.
이것은 break가 없어서 나타난 현상인데, break의 역할은 case문을 탈출이다. switch문이 실행이 되면, 결과값과 case 값이 같은 곳에서 명령실행이 시작되며, break 있는 곳까지 명령이 진행된다. 만약 break가 없다면, 명령 실행이 시작하고, 소스코드의 명령어가 없을 때까지 명령실행이 된다.
#include<stdio.h>
void main() {
int a;
printf("점수 입력:");
scanf("%d", &a);
switch(a/10){
case 10:
case 9:
printf("Grade A"); //case 10일때, case 9일때 Grade A를 출력
case 8:
printf("Grade B");
case 7:
printf("Grade C");
case 6:
printf("Grade D");
default:
printf("Grade F");
}
}
위의 코드를 실행한 뒤, 점수를 100으로 입력하면, 다음과 같은 결과가 나온다.
이처럼 break가 없으면, 결과값과 case 값이 같은 곳에서 명령실행이 시작해서, 명령어가 없을 때까지 명령을 실행하는 것을 볼 수 있다. 즉, case의 명령어를 멈추기 위해서는 break를 사용해야 한다.
'프로그래밍 언어 > C언어' 카테고리의 다른 글
반복문(for문) (0) | 2023.02.11 |
---|---|
반복문(while문) (0) | 2023.02.10 |
조건문(if문) (0) | 2023.02.08 |
연산자(비트, 삼항, 기타 등등) (0) | 2023.02.07 |
연산자(산술, 대입, 증감, 비교, 논리) (0) | 2023.02.06 |