문제 상황
중첩 switch-case(nested switch-case) 문을 활용하여, 사용자가 입력한 ID를 기준으로 해당 비밀번호가 유효한지 확인하는 C 프로그램을 작성해 보겠습니다.
해결 방법
핵심 개념은 다음과 같습니다.
- C 언어에서는 외부(outer) switch 문 안에 내부(inner) switch 문을 작성할 수 있습니다.
- 내부 switch와 외부 switch의 case 값은 서로 동일한 값을 가질 수도 있습니다.
switch 문 작성 규칙
중첩 switch 문을 올바르게 작성하려면 아래 규칙을 지켜야 합니다.
- 조건식(표현식)은 실행되어 하나의 결과값으로 평가됩니다.
- case 레이블에는 반드시 상수이면서 고유한(unique) 값을 사용해야 합니다.
- case 레이블은 콜론(:)으로 끝나야 합니다.
- 각 case 블록에는 break 키워드를 포함해야 합니다.
- default 레이블은 switch 문당 하나만 존재할 수 있습니다.
- switch 문은 여러 겹으로 중첩하여 작성할 수 있습니다.
예제 코드
다음은 중첩 switch-case 문을 이용해 사용자의 ID에 따라 입력된 비밀번호가 올바른지 검사하는 C 프로그램입니다. 외부 switch가 사용자 ID를 먼저 확인하고, ID가 일치하면 내부 switch가 비밀번호를 검사하는 구조로 동작합니다.
#include <stdio.h>
int main(){
int userid;
int pwd;
printf("enter userid:\n");
scanf("%d",&userid);
switch (userid){
case 1234:
printf("enter password:\n ");
scanf("%d", & pwd);
switch (pwd){
case 0000:
printf("Tutorials Point\n");
break;
default:
printf("incorrect password");
break;
}
break;
default:
printf("incorrect userid");
break;
}
}
실행 결과
프로그램을 실행하면 다음과 같은 출력을 확인할 수 있습니다.
Run 1:
enter userid:
1234
enter password:
0000
Tutorials Point
Run 2:
enter userid:
1234
enter password:
234
incorrect password
동작 원리 요약
첫 번째 실행에서는 ID로 1234를 입력했기 때문에 외부 switch의 해당 case가 실행되고, 이어서 비밀번호 0000이 일치하여 내부 switch의 case가 수행되어 성공 메시지가 출력됩니다. 반면 두 번째 실행에서는 ID는 일치했지만 비밀번호가 틀렸으므로 내부 switch의 default 레이블이 실행되어 'incorrect password'가 출력되는 것을 볼 수 있습니다. 만약 ID 자체가 틀렸다면 외부 switch의 default 레이블이 실행됩니다.