【发布时间】:2013-03-05 19:21:19
【问题描述】:
我试图让防御性编程以整数形式输入,但如果我输入一个字符,程序将进入无限循环。 然后我切换到将输入作为字符,但它会循环两次。一次用于错误字符,一次用于行尾击键。
有没有什么办法让循环一次?
代码:
int main(int argc, char *argv[])
{
char choice='5';
while (choice != '1' && choice !='2' && choice !='3' && choice!='4' && choice!='0')
{
printf("Parakalw epilekste ena apo ta parakatw\n\n");
printf("1.\tKafe 1.5 euro\n");
printf("2.\tKafe me gala 1.8 euro\n");
printf("3.\tSokolata 2.1euro\n");
printf("4.\tSokolata me gala 2.4 euro\n");
printf("0.\tExodos\n\n");
printf("parakalw eisagete thn epilogh sas: ");
scanf("%c",&choice);
}
system("PAUSE");
return 0;
}
【问题讨论】:
-
为什么不用像
int n; scanf ("%d",&n);这样的整数? -
如果 n = 任何字符而不是数字,它将进入无限循环
-
@NikolaosTsouktakos:那是因为 scanf 将无法读取数字,并且您的循环编写方式会不断尝试,永远使用相同的输入。