通过在while循环中使用Y / N选项,我的循环在某种程度上是错误的

时间:2013-10-10 04:45:57

标签: c

#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(我不是那么好的广告)时,该程序没有完成它的工作。任何人都可以解释这个吗?我的朋友不知道关于这一点,我已经尝试在论坛上搜索,没有任何线索

3 个答案:

答案 0 :(得分:3)

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

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

计数器0不是'Y'

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

一些额外的附注:了解indentation,主函数的返回类型应为int,检查syntax of main function

答案 1 :(得分:0)

如果你注释掉counter = 0;然后循环只能工作一次。这是因为计数器的类型为char,在

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

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

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

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

要更正代码,只需添加fflush(stdin); scanf之后(“%i”,&amp; menu);如下所示

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

答案 2 :(得分:0)

int counter=0;
int howmuch=100;
while (counter < howmuch)
    //do something
    counter++;
{