在C语言中选择默认情况下,我似乎无法再次循环

时间:2013-10-25 16:49:09

标签: c switch-statement

大家好我编写了类似kfc菜单的东西,然后让它工作(最后),但是当我为“菜单”输入数字以外的东西时,例如:字母“A”,我就是无法得到它再循环到正常,而不是它完成程序

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char counter='y';
    float totalprice=0;

    while (counter=='Y'  ||  counter=='y')
    {
        int menu;
        float price=0;

        printf("\nplease select from menu:");
        scanf (" %i", &menu);

        switch(menu)
        {
          case  1: {
              printf("\none hotbox1 =RM10.50");
              totalprice=totalprice+10.50;
              break;
          }
          case   2: {
              printf ("\none hotbox2=RM10.60");
              totalprice=totalprice+10.60;
              break;
          }
          case   3:{
              printf ("\none hotbox3=RM10.70");
              totalprice=totalprice+10.70;
              break;
          }
          default : {
              printf ("\nplease enter proper number please:");
              scanf("%2f", &menu);
              break;
          }
        }

        printf("\n\nadd order?(Y/N):");
        scanf (" %c", &counter);
    }

    printf("\n\nThe total price is: %f", totalprice);
    return 0;
}

7 个答案:

答案 0 :(得分:1)

您应首先使用fgets()reference here),然后使用sscanf()reference here),检查其返回值,看是否为数字。

char inputBuffer[MAX_BUFFER];

do
{
    fgets(inputBuffer, MAX_BUFFER, stdin);
}
while(sscanf(inputBuffer, "%d", &menu) != 1)

答案 1 :(得分:0)

在默认情况下,您使用%f扫描,我相当确定是浮点数。使用%d

答案 2 :(得分:0)

删除scanf("%2f", &menu);

答案 3 :(得分:0)

scanf("%i", &menu)尝试从输入读取整数时,它会找到A,它不能解释为数字,因此它不会读取它(*)。然后下一个scanf继续从另一个停止时读取输入,并愉快地读取字母'A'。因为只要读取的字母是'y'或'Y'(A既不是A)就循环,它就会退出循环。

(*)阅读scanf文档,了解如何判断是否遇到错误。

注意:scanf("%i", &menu)应为scanf("%d", &menu) as%d`是整数的格式化符号。

一种解决方案是将循环条件更改为:

while (counter!='N' && counter!='n')
{
  ...
}

这样,只有在输入明确的“N”或“n”时才结束循环。

注意:如果您不小心为菜单项键入“n”,它将无济于事,因此请参阅上面有关错误处理的注释。

答案 4 :(得分:0)

Switch in C在switch-case中不支持char。在启动switch-case之前验证用户输入。如果是数字进入开关情况,否则显示用户消息仅输入数值

答案 5 :(得分:0)

我建议你通过在循环中的各个点打印出“counter”的值来调试它(即在你读取它之后,在循环的底部等)。这将使您可以了解代码的作用。

答案 6 :(得分:0)

您可以尝试这样的事情

#include <stdio.h>    
int main()
{
    char counter;
    float totalprice=0;
    int menu=0;
    do
    {
        printf("\n1. one hotbox1=RM10.50");
        printf("\n2. one hotbox2=RM10.60");
        printf("\n3. one hotbox3=RM10.70");
        printf("\nplease select from menu:");
        scanf ("%d", &menu);
        switch(menu)
        {
          case 1:
              printf("\none hotbox1 =RM10.50");
              totalprice=totalprice+10.50;
              break;
          case 2:
              printf ("\none hotbox2=RM10.60");
              totalprice=totalprice+10.60;
              break;
          case 3:
              printf ("\none hotbox3=RM10.70");
              totalprice=totalprice+10.70;
              break;
          default :
              printf ("\nplease enter proper number please:");
              scanf("%d", &menu);
        }
        printf("\n\nadd more order?(Y/N):");
        fflush(stdin);      //to empty the input stream.
        scanf("%c",&counter);
    }while(tolower(counter) != 'n'); //tolower returns the lowercase character.

    printf("\n\nThe total price is: %.2f", totalprice);
    return 0;
}