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

void main()
{
    char counter='Y';
    int howmuch;
    counter=0;
    howmuch=100;

    while (counter=='Y')
    {
        int menu;
        float price;
        float totalprice=0.00;
        printf("please select from menu:");
        scanf ("%i", &menu);

        switch(menu)
        {
        case  1: {
            printf("one hotbox1 =RM10.50");
            totalprice=totalprice+10.50;

            break;
            }
        case   2:{ 
            printf ("one hotbox2=RM10.60");
            totalprice=totalprice+10.60;

            break;
            }

        case   3:{
            printf ("one hotbox3=RM10.70");
            totalprice=totalprice+10.70;

            break;
            }

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

当我使用计数器增量时,我可以正常运行它,但是当我使用 Y/N(我不是很好的广告)时,程序没有完成它的工作。谁能解释一下?我的朋友也不知道这个,我已经尝试在论坛中搜索,没有任何线索

4

3 回答 3

3

循环没有机会执行,因为 while 条件为假:

counter = 0;
howmuch = 100;
while (counter == 'Y'){
  // loop code 
  // unreachable code  
}

柜台0是不是'Y'

使用 -Wall 选项编译您的代码,您可能会收到无法访问代码的警告。

一些附加说明:了解缩进,主函数的返回类型应该是 int,检查主函数的语法

于 2013-10-10T04:47:37.627 回答
0

如果你注释掉 counter=0; 然后循环将只工作一次。那是因为 counter 是 char 类型,之后

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

标准输入缓冲区充满了菜单(选择的选项,如 1 2 或 3)和换行符(当您按下回车键时)。

对于下一个 scanf,该换行符将被视为计数器的输入。

您可以尝试在上述代码的 while 循环之外将计数器值打印为“%d”,然后使用 ASCII 表进行交叉检查。

要更正您的代码,您只需添加 fflush(stdin); 在 scanf ("%i", &menu) 之后;像下面

printf("please select from menu:");
scanf ("%i", &menu);
fflush(stdin);
于 2013-10-10T08:04:38.043 回答
0
int counter=0;
int howmuch=100;
while (counter < howmuch)
    //do something
    counter++;
{
于 2013-10-10T08:08:04.583 回答