如何循环直到用户在C中输入N

如何循环直到用户在C中输入N,c,loops,input,while-loop,scanf,C,Loops,Input,While Loop,Scanf,我是一个C程序的初学者,我正在尝试制作一份餐馆点菜菜单。 我从用户输入“Y”开始下单。 然后我希望程序继续接受命令,直到用户输入“N”停止。 当输入“N”时,将打印总销售额。 但是我不能做循环,你介意帮我吗?谢谢。:) #包括 #包括 int main() { int代码; 浮动总价=0,总销售额=0; 字符选择,选择1; printf(“欢迎来到熟食三明治!输入Y开始您的订单!\n”); scanf(“%c”,选择(&c)); while(choice=='Y'| | choice=='Y')

我是一个C程序的初学者,我正在尝试制作一份餐馆点菜菜单。 我从用户输入“Y”开始下单。 然后我希望程序继续接受命令,直到用户输入“N”停止。 当输入“N”时,将打印总销售额。 但是我不能做循环,你介意帮我吗?谢谢。:)

#包括
#包括
int main()
{
int代码;
浮动总价=0,总销售额=0;
字符选择,选择1;
printf(“欢迎来到熟食三明治!输入Y开始您的订单!\n”);
scanf(“%c”,选择(&c));
while(choice=='Y'| | choice=='Y')
{
printf(“\n_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
printf(“\n\t\t菜单\t\t代码\t\t价格\n”);
printf(“\n\t\t Egg\t\t 1\t\t RM 1.00\n”);
printf(“\n\t\t金枪鱼\t\t 2\t\t RM 2.00\n”);
printf(“\n\t\t海鲜\t 3\t\t RM 3.00\n”);
printf(“\n\t\t鸡肉火腿\t 4\t\t RM 2.50\n”);
printf(“\n三明治填充代码:”);
scanf(“%d”、&code);
开关(代码)
{
案例1:
printf(“已拾取鸡蛋。\n”);
总价+=1;
打破
案例2:
printf(“金枪鱼被捕捞了。\n”);
总价格+=2;
打破
案例3:
printf(“海鲜已采摘。\n”);
总价格+=3;
打破
案例4:
printf(“已拾取鸡肉火腿。\n”);
总价格+=2.50;
打破
违约:
printf(“无效代码”);
}
printf(“\n_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
printf(“\n\t\t菜单\t\t代码\t\t价格\n”);
printf(“\n\t\t一半\t\t 1\t\t RM 3.00\n”);
printf(“\n\t\t整个\t\t 2\t\t RM 5.00\n”);
printf(“\n三明治类型代码:”);
scanf(“%d”、&code);
开关(代码)
{
案例1:
printf(“拾取了一半。\n”);
总价格+=3;
打破
案例2:
printf(“整个已拾取。\n”);
总价+=5;
打破
违约:
printf(“无效代码”);
}
printf(“\n总价为RM%.2f.\n”,总价);
printf(“谢谢,请再来!\n”);
总销售额+=总价格;
printf(“\n欢迎光临熟食三明治!输入Y开始您的订单!\n”);
scanf(“%c”,选择(&c));
}
printf(“\n总销售额为RM%.2f.\n”,总销售额);
返回0;
}

再次感谢:)

更改

scanf("%c", &choice);

这样做是为了丢弃所有空白字符,如
\n
stdin
中的空格

scanf
输入数据时,输入一些数据并按enter键
scanf
使用输入的数据,并将
\n
(回车键)留在输入缓冲区(
stdin
)。下次调用带有
%c
scanf
时,它将把
\n
作为输入(由上一个
scanf
留下),并且不会等待进一步的输入

在代码中

scanf("%c", &choice);
while
循环使用您输入的字符并将
\n
留在
stdin
之前。为什么呢

scanf("%d", &code);
等待输入的原因是
%d
格式说明符跳过空白字符,而
%c
不跳过空白字符

scanf(" %c", &choice);

通过在
%c
之前放置一个空格来忽略输入末尾的换行符,只需在%c

之前添加空格。提供输入后,按ENTER键存储到输入缓冲区
stdin
,并将其视为循环
scanf()的
%c
格式说明符的有效输入。为了避免扫描存储的
\n
,您需要像这样更改代码

scanf(" %c", &choice);
      ^
      |

此前导空格表示忽略任何前导空格或类似空格的字符(包括
\n
)并扫描第一个非空格字符。[在你的情况下,
y
/
y
/
n
…]

噢,是这样吗?多谢各位!
scanf(" %c", &choice);
scanf(" %c", &choice);
      ^
      |