计算器程序输入非数字时触发无限错误循环的问题求助
计算器程序输入非数字时触发无限错误循环的问题求助
我正在做一个包含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
相关产品推荐
相关产品推荐

