gpt4 book ai didi

c - "scanf"语句不执行?

转载 作者:行者123 更新时间:2023-11-30 21:02:04 27 4
gpt4 key购买 nike

我的代码如下:

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值后,"scanf("%d",&operation)"语句就不再执行了,所以操作代码总是错误的。有人告诉我加一条语句,“fflush(stdin);”,清除输入缓存并解决问题但是为什么当我输入错误的整数运算代码时,即使我不添加“fflush(stdin);”语句,代码也能正常运行。

最佳答案

您应该检查 scanfreturn -

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 也会清除 stdin

关于c - "scanf"语句不执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33318619/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com