我的代码如下:
int main(int argc, char **argv)
{
int quit=1;
int operation;
paintUI();
init();
while(quit)
{
printf("please input a operation code:");
scanf("%d",&operation);
switch(operation)
{
case 1:addBook();break;
case 2:deleteBook();break;
case 3:borrowBook();break;
case 4:backBook();break;
case 5:printAll();break;
case 6:printAllBorrowed();break;
case 7:findByNameAdapter();break;
case 8:findByNumberAdapter();break;
case 9:save();quit=0;break;
case 0:system("cls");paintUI();break;
default:printf("input error\n");break;
}
}
return 0;
}
当我向“操作”输入一个整数时,代码运行良好。但是当我故意输入一个char值时,代码将被无限循环捕获并一直打印“输入错误”。当我调试时,我发现在我故意输入一个char值后,语句“scanf(”%d“,& operation)”,不再执行了,所以操作代码总是错误的。有人告诉我要添加声明“fflush(stdin);”,清除输入缓存并解决问题 但是为什么当我输入错误的整数操作代码时,即使我不添加语句“fflush(stdin);”,代码也可以正常工作。
答案 0 :(得分:1)
您应该检查return
的<{1}} -
scanf
因此,如果您输入字符,则int c;
if(scanf("%d",&operation)==1){ //will return 1 if integer is entered
switch(operation)
{
case 1:addBook();break;
case 2:deleteBook();break;
case 3:borrowBook();break;
case 4:backBook();break;
case 5:printAll();break;
case 6:printAllBorrowed();break;
case 7:findByNameAdapter();break;
case 8:findByNumberAdapter();break;
case 9:save();quit=0;break;
case 0:system("cls");paintUI();break;
default:printf("input error\n");break;
}
while((c=getchar()!='\n') && c!=EOF);
}
会失败,scanf
也会清除getchar
。