You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

计算器程序输入非数字时触发无限错误循环的问题求助

计算器程序输入非数字时触发无限错误循环的问题求助

我正在做一个包含12种操作的计算器,第12项是退出功能。原本希望用户输入1-12之外的值时能弹出错误提示并重新显示菜单,但现在遇到了奇怪的问题:

  • 输入15、500这类超出范围的数字时,程序能正常打印“try again”并回到菜单,符合预期;
  • 可一旦输入字母比如'a'或者符号'?'这类非数字内容,程序就会陷入无限循环,一直重复输出错误提示。

我猜问题出在while循环嵌套的if/else逻辑里,但搞不懂为什么输入非数字时,那个标了“Red”的else分支里的break;执行后没法回到菜单。我试过换成do/while循环,结果还是一样;也尝试把错误提示放到switch的default分支里,数字超出范围时没问题,但输入非数字依旧会无限循环错误提示。

下面是我出问题的代码:

#define RESTRICT(option, min, max) (option > min && option < max)

while(!exit) {

printf("Choose an option:");

printf("1. Eliminate.");

printf("2. Show fraction.");

printf("3. Show all fractions.");

printf("4. Show the absolute value.");

printf("5. Simplify.");

printf("6. Add.");

printf("7. Subtract.");

printf("8. Multiply.");

printf("9. Divide.");

printf("10. Save in archive.");

printf("11. Load in archive.");

printf("12. Exit program.");

if(scanf("%i", &option) == 1){

if(RESTRICT(option,0,12)){

switch(option){

case 1:

printf("Example");

break;

case 2:

printf("Example");

break;

case 3:

printf("Example");

break;

case 4:

printf("Example");

break;

case 5:

printf("Example");

break;

case 6:

printf("Example");

break;

case 7:

printf("Example");

break;

case 8:

printf("Example");

break;

case 9:

printf("Example");

break;

case 10:

printf("Example");

break;

case 11:

printf("Example");

break;

}

} else if (option==12){

printf("\nGoodbye!\n");

exit=1;

} else {

printf("\nThat is not an option! Try again\n");

printf("\nBlue\n");

continue;

}

} else {

printf("\nThat is not an option! Try again\n");

printf("\nRed\n");

break;

}

}

有没有大佬能帮我分析下问题根源,以及该怎么修复这个无限循环的问题?

备注:内容来源于stack exchange,提问作者dinosaur2039

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:47:46