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