大家好我编写了类似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;
}
答案 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;
}