“scanf”语句没有执行?

时间:2015-10-24 13:15:29

标签: c

我的代码如下:

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);”,代码也可以正常工作。

1 个答案:

答案 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