【发布时间】:2021-08-03 20:06:52
【问题描述】:
int valid=0, running=1;
printf("\n1. Generate\n2. Retrieve");
while(!valid){
printf("\n\nEnter choice> ");
scanf("%d", &c);
if(c==1){
valid=1;
generate();
while(running){
printf("\n\nPress Y to generate again. Press N to retrieve> ");
scanf(" %c", retry);
if(retry == 'Y' || retry == 'y'){
idx++;
generate();
}else if(retry == 'N' || retry == 'n')
running = 0;
else
printf("Invalid input. Try again.");
}
retrieve();
}else if(choice==2){
valid = 1;
retrieve();
}else
printf("Invalid input. Try again");
}
这里用户应该输入 1 或 2。如果用户输入任何其他数字或字符,那么我想要求用户再次输入。如果用户输入任何其他数字(如 5/6/7 等),程序可以正常工作。但如果用户输入字符,程序会进入无限循环。我可以通过 scanf 状态检查来打破循环,但随后程序停止。相反,如果用户输入除 1 或 2 之外的任何内容,我想提示用户再次输入。
【问题讨论】:
-
第一步:查看
scanf("%d", &c);的返回值。是 1 吗? -
kerbx4,如果选择是空行会发生什么?等待更多输入或提示,然后等待新输入?
-
@WilliamPursell:非常好。归档以备将来参考。
-
你似乎把
c(在if)和choice(在else if)搞混了......但你没有显示任何一个的声明。请发布我们可以实际测试的代码。