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

时间:2015-01-13 13:54:48

标签: c loops input while-loop scanf

我是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;

}

再次感谢你:)

4 个答案:

答案 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 ...]