我是C程序的初学者,我正在尝试制作餐厅订单菜单。 我从用户输入" Y"开始开始订购。 然后我希望程序继续接受订单,直到用户输入" N"停止。 输入" N"时,将打印总销售额。 但我不能做循环,你介意帮我吗?谢谢。 :)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int code;
float totalPrice=0, totalSales = 0 ;
char choice, choice1;
printf("Welcome to Deli Sandwich! Enter Y to start your order!\n");
scanf("%c", &choice);
while(choice=='Y'|| choice=='y')
{
printf("\n____________________________SANDWICH FILLING______________________________\n");
printf("\n\t\t Menu \t\t Code \t\t Price\n");
printf("\n\t\t Egg \t\t 1 \t\t RM 1.00\n");
printf("\n\t\t Tuna \t\t 2 \t\t RM 2.00\n");
printf("\n\t\t Seafood \t 3 \t\t RM 3.00\n");
printf("\n\t\t Chicken Ham \t 4 \t\t RM 2.50\n");
printf("\nSandwich Filling code: ");
scanf("%d", &code);
switch(code)
{
case 1:
printf("Egg is picked.\n");
totalPrice+= 1;
break;
case 2:
printf("Tuna is picked.\n");
totalPrice+= 2;
break;
case 3:
printf("Seafood is picked.\n");
totalPrice+= 3;
break;
case 4:
printf("Chicken Ham is picked.\n");
totalPrice+= 2.50;
break;
default :
printf("invalid code.");
}
printf("\n_____________________________SANDWICH TYPE________________________________\n");
printf("\n\t\t Menu \t\t Code \t\t Price\n");
printf("\n\t\t Half \t\t 1 \t\t RM 3.00\n");
printf("\n\t\t Whole \t\t 2 \t\t RM 5.00\n");
printf("\nSandwich Type code: ");
scanf("%d", &code);
switch(code)
{
case 1:
printf("Half is picked.\n");
totalPrice+= 3;
break;
case 2:
printf("Whole is picked.\n");
totalPrice+= 5;
break;
default :
printf("invalid code.");
}
printf("\nThe total price is RM%.2f.\n", totalPrice);
printf("Thank You. Please come again!\n");
totalSales+= totalPrice;
printf("\nWelcome to Deli Sandwich! Enter Y to start your order!\n");
scanf("%c", &choice);
}
printf("\nThe total sales is RM%.2f.\n", totalSales);
return 0;
}
再次感谢你:)
答案 0 :(得分:0)
更改
scanf("%c", &choice);
到
scanf(" %c", &choice); // note the space before %c
这样做是为了放弃\n
之类的所有空白字符和stdin
中的空格。
输入scanf
的数据时,输入一些数据并按 enter键。 scanf
使用输入的数据并将\n
(输入键)保留在输入缓冲区(stdin
)中。如果下次调用scanf
%c
,则\n
将作为输入(由前一个scanf
保留)并且不会等待进一步输入。
在您的代码中,
scanf("%c", &choice);
在while
循环消耗您输入的字符之前,并将\n
留在stdin
中。至于为什么
scanf("%d", &code);
等待输入是%d
格式说明符跳过空白字符而%c
没有。
答案 1 :(得分:0)
scanf(" %c", &choice);
在%c
答案 2 :(得分:0)
在%c
之前添加空格答案 3 :(得分:0)
提供输入后按 ENTER 键,将其存储到输入缓冲区stdin
中,并视为%c
格式说明符的有效输入反复出现的scanf()
。要避免扫描存储的\n
,您需要更改代码,如
scanf(" %c", &choice);
^
|
此前导空格表示忽略任何前导空格或类空白字符(包括\n
)和扫描第一个非空白字符。 [在您的情况下y
/ Y
/ n
...]