[C] 1번부터 4번 중에 투표해

장세민·2022년 7월 6일
0

📝 TIL

목록 보기
8/40

회식 메뉴를 정할 때 선택지가 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 (식)

  • 식의 결과값이 정수형(문자형)일 때만 사용이 가능하다.

즉, 실수형은 안됨!

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년 전후 출생, 내/외국인 까지 구별이 가능하다.
그럼 한 번 구별할 수 있는 프로그램을 작성해보자.

  • 주민번호 7번째 수
    1: 2000년 이전 출생 남자
    2: 2000년 이전 출생 여자
    3: 2000년 이후 출생 남자
    4: 2000년 이후 출생 여자
    5, 6, 7, 또는 8: 외국인
#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;
}

2001년생 남자니까 3을 입력해보자


ㅎㅋ

case는 중첩해서 사용할 수 있다!

profile
분석하는 남자 💻

1개의 댓글

comment-user-thumbnail
2022년 7월 6일

잘하고있네

답글 달기