如何循环直到用户在 C 中输入 N
How to loop until user input N in C
我是 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;
}
再次感谢您:)
改变
scanf("%c", &choice);
至
scanf(" %c", &choice); // note the space before %c
这样做是为了丢弃 stdin
.
中的所有白色 space 字符,例如 \n
和 space
当您为 scanf
输入数据时,您输入一些数据并按 输入键 。 scanf
使用输入的数据并将 \n
( 输入键 )留在输入缓冲区 (stdin
) 中。下次调用带有 %c
的 scanf
时,它会将 \n
作为输入(前一个 scanf
遗留下来的)并且不会等待进一步的输入。
在您的代码中,
scanf("%c", &choice);
在 while
循环消耗您输入的字符并在 stdin
中留下 \n
之前。至于为什么
scanf("%d", &code);
等待输入是 %d
格式说明符跳过 white-space 字符而 %c
不会。
scanf(" %c", &choice);
通过在 %c
之前放置一个 space 来忽略输入末尾的换行符
简单地在 %c
之前添加 space
提供输入后的 ENTER 按键存储到输入缓冲区 stdin
并被视为 有效 输入%c
循环 scanf()
的格式说明符。为避免扫描存储的\n
,您需要像
这样更改代码
scanf(" %c", &choice);
^
|
这个前导 space 表示 忽略 任何前导的白色 space 或类似白色 space 的字符(包括 \n
) 和 扫描 第一个非白色 space 字符。 [你的情况 y
/ Y
/ n
...]
我是 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;
}
再次感谢您:)
改变
scanf("%c", &choice);
至
scanf(" %c", &choice); // note the space before %c
这样做是为了丢弃 stdin
.
\n
和 space
当您为 scanf
输入数据时,您输入一些数据并按 输入键 。 scanf
使用输入的数据并将 \n
( 输入键 )留在输入缓冲区 (stdin
) 中。下次调用带有 %c
的 scanf
时,它会将 \n
作为输入(前一个 scanf
遗留下来的)并且不会等待进一步的输入。
在您的代码中,
scanf("%c", &choice);
在 while
循环消耗您输入的字符并在 stdin
中留下 \n
之前。至于为什么
scanf("%d", &code);
等待输入是 %d
格式说明符跳过 white-space 字符而 %c
不会。
scanf(" %c", &choice);
通过在 %c
简单地在 %c
之前添加 space提供输入后的 ENTER 按键存储到输入缓冲区 stdin
并被视为 有效 输入%c
循环 scanf()
的格式说明符。为避免扫描存储的\n
,您需要像
scanf(" %c", &choice);
^
|
这个前导 space 表示 忽略 任何前导的白色 space 或类似白色 space 的字符(包括 \n
) 和 扫描 第一个非白色 space 字符。 [你的情况 y
/ Y
/ n
...]