회식 메뉴를 정할 때 선택지가 n가지이고,
그 중 한 가지 메뉴만 선정할 수 있는 프로그램을 만들고 싶다.
그럴 때는 else if 중첩하면 쉽게 고를 수 있다.
#include <stdio.h> int main() { int chicken, pizza, sushi, jokbal, menu; chicken = 1; pizza = 2; sushi = 3; jokbal = 4; printf("어떤 메뉴를 먹을까? (1.치킨 2.피자 3.초밥 4. 족발) "); scanf("%d", &menu); if (menu == 1) { printf("회식 메뉴는 치킨입니다.\n"); } else if (menu == 2) { printf("회식 메뉴는 피자입니다.\n"); } else if (menu == 3) { printf("회식 메뉴는 초밥입니다.\n"); } else { printf("회식 메뉴는 족발입니다.\n"); } return 0; }
이런 느낌
_
이번 달 말에 예비군에게 동원훈련 참석 차 확인 전화를 돌려서
훈련 참여 여부와 이전에 원격 교육을 받은 적이 있는지,
20-21년도에 헌혈한 적은 있는지 일일이 전화해서 확인하는 작업이 있었다.
매우 귀찮았음
질문만 하니까 if문이 생각 났었는데,
배운걸로 한 번 만들어봤다.
#include <stdio.h> int main() { int edu, time_edu, time_blood; printf("원격교육 이수 시간은? (없다: '0', 1시간: '1', 2시간: '2', 3시간: '3', 4시간: '4')"); scanf("%d시간", &time_edu); if (time_edu >= 0 && time_edu <= 4); { printf("20년도 or 21년도에 헌혈한 적이 있는지? (0회: '0', 1회: '1', 2회 이상: '2')"); scanf("%d회", &time_blood); printf("귀하는 총 %d 시간 동원훈련 대상자 입니다.\n", 8 - time_edu - time_blood); } return 0; } /* 예비군 동원훈련 교육 시간 계산 프로그램, 동원훈련 총 8시간 원격 교육 이수 총 4시간까지 인정 가능, 20년도, 21년도 헌혈한 적 있으면 1회당 1시간 인정 (최대 2회까지 인정, 1회 = 1시간) */
switch문
여러가지 일 중 특정 경우에 맞는 일을 선택할 때 switch문을 이용하면 편하다.
즉, 실수형은 안됨!
switch문은 (식) 을 계산하여 결과값이 일치하는 곳으로 이동하는데,
각각의 case 경우의 결과값과 비교하여 일치하면 break; 제어문을 통해 switch문을 벗어나게 된다.
(break 생략 가능)
'값'에는 1, 10, 'A', '+'같이 상수 1개만 사용 가능하다.
근데 만약 case의 어떤 값과도 일치하지 않는다면
마지막 default: 의 값이라고 판단하여 결과값을 낸다. (생략 가능)
연필 개수 홀짝 구분 프로그램
switch문을 이용해서 입력된 n개의 연필의 개수가 홀수인지 짝수인지 구분해보자
#include <stdio.h> int main() { int pencil; printf("연필 개수는?"); scanf("%d", &pencil); switch (pencil % 2) { case 0: printf("짝수개 입니다.\n"); break; case 1: printf("홀수개 입니다.\n"); break; } return 0; }
홀짝을 구분하기 위해 2로 나눴고,
나머지의 값에 따라 case를 나눠 switch문을 작성했다.
만약 break;을 생략하면?
#include <stdio.h> int main() { int pencil; printf("연필 개수는?"); scanf("%d", &pencil); switch (pencil % 2) { case 0: printf("짝수개 입니다.\n"); case 1: printf("홀수개 입니다.\n"); break; } return 0; }
case값과 일치했지만, break;이 없었기 때문에 다음 case의 경우도 프린트 된다.
2000년 이전/이후 출생한 남/여와 외국인 구분 프로그램
주민번호 7번째 수를 통해 성별, 2000년 전후 출생, 내/외국인 까지 구별이 가능하다.
그럼 한 번 구별할 수 있는 프로그램을 작성해보자.
#include <stdio.h> int main() { int n; printf("주민번호 7번째 수는?"); scanf("%d", &n); switch (n) { case 1: printf("2000년 이전 출생 남자 \n"); break; case 2: printf("2000년 이전 출생 여자 \n"); break; case 3: printf("2000년 이후 출생 남자 \n"); break; case 4: printf("2000년 이후 출생 여자 \n"); break; case 5: case 6: case 7: case 8: printf("외국인 \n"); break; default : printf("잘못된 입력 \n"); } return 0; }
ㅎㅋ
case는 중첩해서 사용할 수 있다!
잘하고있네