如何循环直到用户在 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) 中。下次调用带有 %cscanf 时,它会将 \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...]