(리턴값의 타입) 함수명 (변수, 변수, 변수)
{
// 실행할 문장
}
ex)
int max_(int num1, int num2)
{
if (num1>num2)
{
return num1;
}
return num2;
}
- 어제 만들었던 자판기 만들기 코드를 오늘 함수화를 시킴!!
- continue랑 break 때문에 함수화를 제대로 못시켜서 코드 순서를 바꿔서 continue를 최대한 없애봤다!
- 어제 왜벌레 만든거 보고 엄청 머리를 띵 맞았다링~~ 너무 좋아서 ㅋㅋㅋ 고마워 왜벌레~~
★ 만든 함수 리스트
- 숫자 입력(메뉴 or 금액) 및 메뉴판 보여주는 함수
- 주문서를 보여주는 함수
- 구매 후 남은 돈을 계산해주는 함수
- 추가로 더 구매할건지 물어보는 함수
// 2025.03.14. (금)
// 자판기, 메뉴 5가지
// 콜라 / 사이다 / 이온음료 / 주스 / 물
// 800 / 700 / 600 / 600 / 500
// 돈 넣음 -> 얼마 넣었는지 보여줌.
// 10원보다 적게 넣으면 메뉴선택 / 많으면 추가 돈 입력
// 10, 50, 100, 500, 1000, 5000, 10000, 50000원 만 받음.
// ex) 117원 들어오면 거부
// 정상적인 돈 들어오면, 그 메뉴 뽑아주는데, 몇개 고를건지도 물어봐야함.
// 더 구매할건지 물어보고, no라고 하면 잔돈 받아, yes라고 하면 다시 메뉴고름.
#include <stdio.h>
// 금액 입력 or 메뉴 선택 함수
int select_menu(int total_money)
{
int input;
printf("=================================\n");
printf("|\t현재 소지금 : %d원\t|\n", total_money);
printf("============ < MENU > ===========\n");
printf("1. 콜라\t\t\t(800원)\n");
printf("2. 사이다\t\t(700원)\n");
printf("3. 이온음료\t\t(600원)\n");
printf("4. 주스\t\t\t(600원)\n");
printf("5. 물\t\t\t(500원)\n\n");
printf("숫자를 입력해주세요 : ");
scanf("%d", &input); // 메뉴 or 금액 입력
return input;
}
// 주문서 보여주는 함수
void order_sheet(int user_menu, int num_menu, int total_money)
{
printf("\n┌────────── 주문서 ──────────┐\n");
printf("│\t메뉴 : %d번\t │\n", user_menu);
printf("│\t개수 : %d개\t │\n", num_menu);
printf("│\t니돈 : %d원\t │\n", total_money);
printf("└────────────────────────────┘\n");
}
// 구매 후 남은 돈 계산하는 함수
int cal_user_money(int total_money, int num_menu, int menu_price)
{
printf("총 구매금액 : %d원\n", menu_price*num_menu);
total_money -= menu_price*num_menu;
printf("현재 소지금 : %d원\n", total_money);
return total_money;
}
// 추가로 더 구매하는지 묻는 함수
char extra_purchase()
{
char user_select;
printf("더 구매하실 건가요? [ y | n ] : ");
getchar();
scanf("%c", &user_select);
return user_select;
}
// main 함수
int main()
{
int input, user_menu, num_menu, menu_price;
int total_money = 0; // 사용자의 총 소지금
char user_select_result; // 더 구매할건지에 대한 유저 선택 (y/n)
while (1)
{
input = select_menu(total_money);
if (0 < input && input < 6) // 메뉴선택 (input이 1~5인 경우)
{
user_menu = input; // 용어가 헷갈리니까 user_menu로 바꿔줌.
printf("몇 개 사실건가요? : ");
scanf("%d", &num_menu); // 몇개 구매할건지 입력
order_sheet(user_menu, num_menu, total_money);
if (user_menu == 1)
{
menu_price = 800;
if (total_money >= menu_price*num_menu)
{
total_money = cal_user_money(total_money, num_menu, menu_price);
user_select_result = extra_purchase();
if (user_select_result == 'n')
{
printf("잔돈 : %d원\n\n", total_money);
break;
}
}
else
{
printf("총 구매 금액은 %d원 입니다. %d원이 부족합니다. 돈을 더 넣어주세요.\n\n", menu_price*num_menu, (total_money-menu_price*num_menu)*(-1));
}
}
else if (user_menu == 2)
{
menu_price = 700;
if (total_money >= menu_price*num_menu)
{
total_money = cal_user_money(total_money, num_menu, menu_price);
user_select_result = extra_purchase();
if (user_select_result == 'n')
{
printf("잔돈 : %d원\n\n", total_money);
break;
}
}
else
{
printf("총 구매 금액은 %d원 입니다. %d원이 부족합니다. 돈을 더 넣어주세요.\n\n", menu_price*num_menu, (total_money-menu_price*num_menu)*(-1));
}
}
else if (user_menu == 3)
{
menu_price = 600;
if (total_money >= menu_price*num_menu)
{
total_money = cal_user_money(total_money, num_menu, menu_price);
user_select_result = extra_purchase();
if (user_select_result == 'n')
{
printf("잔돈 : %d원\n\n", total_money);
break;
}
}
else
{
printf("총 구매 금액은 %d원 입니다. %d원이 부족합니다. 돈을 더 넣어주세요.\n\n", menu_price*num_menu, (total_money-menu_price*num_menu)*(-1));
}
}
else if (user_menu == 4)
{
menu_price = 600;
if (total_money >= menu_price*num_menu)
{
total_money = cal_user_money(total_money, num_menu, menu_price);
user_select_result = extra_purchase();
if (user_select_result == 'n')
{
printf("잔돈 : %d원\n\n", total_money);
break;
}
}
else
{
printf("총 구매 금액은 %d원 입니다. %d원이 부족합니다. 돈을 더 넣어주세요.\n\n", menu_price*num_menu, (total_money-menu_price*num_menu)*(-1));
}
}
else if (user_menu == 5)
{
menu_price = 500;
if (total_money >= menu_price*num_menu)
{
total_money = cal_user_money(total_money, num_menu, menu_price);
user_select_result = extra_purchase();
if (user_select_result == 'n')
{
printf("잔돈 : %d원\n\n", total_money);
break;
}
}
else
{
printf("총 구매 금액은 %d원 입니다. %d원이 부족합니다. 돈을 더 넣어주세요.\n\n", menu_price*num_menu, (total_money-menu_price*num_menu)*(-1));
}
}
}
else if (input % 10 != 0 || input <= 0) // 입력한 숫자가 10원 단위로 떨어지지 않거나, 0 이하의 숫자를 입력한 경우 continue 사용하여 다시 입력받도록 함.
{
printf("잘못된 숫자입니다. 숫자를 다시 입력해주세요.\n");
}
else if (input >= 10) // input이 10 이상이면 돈으로 인식하여 total_money에 input을 더해줌. continue 사용하여 다시 숫자 입력으로 돌아감.
{
total_money += input;
// system("clear");
}
}
return 0;
}
'C > 본수업' 카테고리의 다른 글
[2025.03.30] 1차, 2차 배열 함수 전달인자로 사용하기 (0) | 2025.03.31 |
---|---|
[2025.03.28] 1차 배열과 포인터 (0) | 2025.03.28 |
[2025.03.14] Ch.08_문자 입출력과 입력 유효성 검사 (0) | 2025.03.14 |
[2025.03.13] Ch.07_C의 제어몬: 분기와 점프_자판기 만들기 (0) | 2025.03.13 |
[2025.03.12] Ch.06_C의 제어문: 루프_별찍기 (0) | 2025.03.12 |