소연의_개발일지
article thumbnail

오늘은 if, elseif, else문을 공부한 후 이를 활용하여 3가지 메뉴 이상을 사용하는 자판기를 만드는 실습을 했다. 반복문 돌리는 부분이 어려워서 while문을 사용해서 돌리는 방식으로 만들었는데, while 없이도 만드는 연습을 추가로 해야겠다.

 

 


오늘의 문제

C언어 if문을 활용하여

최소 3가지의 메뉴를 판매하는 자판기를 만들어라.


 

 

나의 접근방식

종이에 적은 내용을 순서도로 정리해 봤다.

 

 

인사 및 음료 설명, 음료 번호 누르기

 

커피 모양 아스키 코드를 사용해서 앞에 꾸며줬다.

파이썬과 다르게 얘는 '''로 묶는게 없어서 일일히 줄바꿈을 써 줬다.

 

로고

      )  (\n
     (   ) )\n
      ) ( (\n
    _______)_\n
 .-'---------|  \n
( C|/\\/\\/\\\/\/|\n
 '-./\\/\\/\\/\\/|\n
   '_________'\n
    '-------'\n
 

함수 정의

	int menu_1, menu_2, menu_3; //음료 3가지 순서대로(아아, 바닐라, 초코) 
	int price_1=4000, price_2=4500, price_3=3000; //음료 3가지 가격 순서대로  
	int menu; // 손님이 정한 메뉴 
	int money, money2; // 손님이 넣은 금액 
	char should_continue; // 손님이 더 뽑을지 물음 
 

 

인사 및 음료 설명

printf("어서 오십시오! 음료 자판기에 오신 것을 환영합니다.(^_^)\n저희는 항상 신선한 음료를 제공하겠습니다.\n\n");
		printf("음료를 선택하세요.\n1.아이스 아메리카노(4,000원)\n2.바닐라 라떼(4,500원)\n3.초코라떼(3,000원)\n\n"); 
		printf("음료 번호를 눌러주세요.\n>>");
		scanf("%d", &menu);
 

나는 아이스 아메리카노, 바닐라 라떼, 초코라떼가 있는 자판기를 만들기로 했다.

인사를 하고 음료와 가격을 설명해준다. printf

음료 번호를 누르고 scanf로 그 음료를 menu에 받아준다.

 

 

선택한 음료 안내 및 금액 안내, 금액 입력, 잔액 출력

if(menu==1)
		{
			printf("아이스 아메리카노 가격은 4000원 입니다.\n금액을 넣어주세요.\n>>");
			scanf("%d", &money); // money에 사용자가 입력한 금액을 저장한다.
			while(money<price_1) // 아아메 가격 4000원이 될 때까지  while문을 반복한다.
			{
				printf("금액을 더 넣어주세요.\n현재 확인된 금액은 %d원입니다. %d원이 더 필요합니다.\n>>",money, price_1-money);
				scanf("%d", &money2); // 추가로 필요한 금액은 money2에 저장된다.
				money+=money2; // money2는 money에 계속 저장된다.
			}
			printf("아이스 아메리카노가 나왔습니다! 잔액은 %d원 입니다. \n안녕히 가세요!\n", money-price_1); 
            //입력한 금액이 4000원보다 더 크면 반복문을 빠져나와 음료를 준다. 인사도 해 준다.
			printf("음료를 더 뽑으시려면 y를, 아니면 n를 클릭하세요.\n>>"); //계속할 것인지 묻는다.
			scanf("%s", &should_continue); // 계속할 것인지 묻는 대답을 should_continue에 저장한다.
			if(should_continue=="n") //만약 should_continue가 n라고 하면 if문을 묶은 while loop를 멈춘다.
				{break;}
		}
 

if 문 3개 중 하나만 예시로 가져와 봤다.

가격을 설명하고 금액을 넣어주라고 한다.

사용자가 금액을 입력하고, 그 금액은 money에 저장된다.

만약 금액이 아이스 아메리카노 가격보다 적으면 while문이 계속 반복되며

금액을 계속 넣으라고 한다.

그리고 추가로 넣은 금액 money2변수에 저장되며

money2는 money에 누적 저장된다.

입력한 금액이 음료 금액보다 더 크면 while문을 빠져나와 음료를 준다. 잔액도 계산해 준다.

그리고 계속 할 것인지 묻는다.

 

 

교수님께서 하나의 음료만 마시는 자판기냐고 물어봤다 앗ㅎ

그래서 if문들을 모두 묶어서 while문으로 반복하게 만들어 줬다.

아니면 끝내고, 계속할 것이면 자판기를 처음부터 가동한다.

 

항상 사용자 입장에서 생각해 보는 습관을 가지자.

 

 

코드(주석 추가 예정)

#include <stdio.h>
int main(void)
{
	int menu_1, menu_2, menu_3; //음료 3가지 순서대로(아아, 바닐라, 초코) 
	int price_1=4000, price_2=4500, price_3=3000; //음료 3가지 가격 순서대로  
	int menu; // 손님이 정한 메뉴 
	int money, money2; // 손님이 넣은 금액 
	char should_continue; // 손님이 더 뽑을지 물음 

	while(should_continue!="y")
	{
		printf("      )  (\n     (   ) )\n      ) ( (\n    _______)_\n .-'---------|  \n( C|/\\/\\/\\/\\/|\n '-./\\/\\/\\/\\/|\n   '_________'\n    '-------'\n");
		printf("어서 오십시오! 음료 자판기에 오신 것을 환영합니다.(^_^)\n저희는 항상 신선한 음료를 제공하겠습니다.\n\n");
		printf("음료를 선택하세요.\n1.아이스 아메리카노(4,000원)\n2.바닐라 라떼(4,500원)\n3.초코라떼(3,000원)\n\n"); 
		printf("음료 번호를 눌러주세요.\n>>");
		scanf("%d", &menu);
		if(menu==1)
		{
			printf("아이스 아메리카노 가격은 4000원 입니다.\n금액을 넣어주세요.\n>>");
			scanf("%d", &money);
			while(money<price_1)
			{
				printf("금액을 더 넣어주세요.\n현재 확인된 금액은 %d원입니다. %d원이 더 필요합니다.\n>>",money, price_1-money);
				scanf("%d", &money2);
				money+=money2;
			}
			printf("아이스 아메리카노가 나왔습니다! 잔액은 %d원 입니다. \n안녕히 가세요!\n", money-price_1);
			printf("음료를 더 뽑으시려면 y를, 아니면 n를 클릭하세요.\n>>"); 
			scanf("%s", &should_continue);
			if(should_continue=="n")
				{break;}
		}
		
		
	
		else if(menu==2)
		{
			printf("바닐라 라떼 가격은 4500원 입니다.\n금액을 넣어주세요.\n>>");
			scanf("%d", &money);
			while(money<price_2)
			{
				printf("금액을 더 넣어주세요.\n현재 확인된 금액은 %d원입니다. %d원이 더 필요합니다.\n>>",money, price_2-money);
				scanf("%d", &money2);
				money+=money2;
			
			}
			printf("바닐라라떼가 나왔습니다! 잔액은 %d입니다.\n안녕히 가세요!\n", money-price_2);
			printf("음료를 더 뽑으시려면 y를, 아니면 n를 클릭하세요.\n>>"); 
			scanf("%s", &should_continue);
			if(should_continue=="n")
				{break;}
		}
		
		
		
		else if(menu==3)
		{
			printf("초코라떼 가격은 3000원 입니다.\n금액을 넣어주세요.\n>>");
			scanf("%d", &money);
			while(money<price_3)
			{
				printf("\n금액을 더 넣어주세요.\n현재 확인된 금액은 %d원입니다. %d원이 더 필요합니다.\n>>",money, price_3-money);
				scanf("%d", &money2);
				money+=money2;
			
			}
			printf("초코라떼가 나왔습니다! 잔액은 %d원 입니다. \n안녕히 가세요!\n", money-price_3);
			printf("음료를 더 뽑으시려면 y를, 아니면 n를 클릭하세요.\n>>"); 
			scanf("%s", &should_continue);
				if(should_continue=="n")
					{break;}
		}
		
		else
		{
			printf("메뉴판에 있는 숫자를 입력해주세요!\n");
		}
	}
	return 0; 
}
 

코드 실행 예시

처음 출력 화면

 

1, 2, 3을 입력하지 않으면 다시 입력해달라고 안내하고

처음부터 다시 출력

금액이 부족할 때 while문 반복

 

금액을 음료 가격보다 높게 입력했을 때 while문 빠져나옴.

음료를 주고 잔액을 반환해 준다.

그리고 계속할 것인지 묻는다.

 

.

y를 누르면 다시 실행됨

 


3. 오늘 새로 배운 내용

출처 입력

while 조건문을 True(1)로 하면 참이니까 계속 반복된다.

 

 

>>오늘 나온 C언어 오류

Warning comparison between pointer and integer

문자열 컴파일 관련 오류. char타입과 숫자형 타입 차이에서 나오는 에러이다. -> char로 선언해서 해결

Expected initializer before function name

함수나 구조체 등 무언가 선언이 완료되지 않으면 주로 발생한다.

세미콜론이 달려있지 않거나, 함수를 정의하지 않거나, 철자를 확인해 보자. -> 세미콜론 달아서 해결


4. 참고할 만한 사이트, 래퍼런스

 

asciiart.eu 사이트에 다양한 아스키 아트가 있다.

 

draw.io 라는 사이트를 사용해서 순서도를 그릴 수 있다.

 

스택 오버플로우: 오류들 찾을 수 있는 곳.

https://stackoverflow.com/


5. 특이사항(아이디어 메모)

출처 입력

없음


6. 회고

추가예정


7. To do list

주말 과제: 별찍기

1) 피라미드 별찍기

2) 다이아몬드 별찍기

3) 리본 별찍기

4) 풍차 별찍기(2가지)

5) 보석 별찍기...

 

profile

소연의_개발일지

@ssoyxon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!