计算器作业:输入非法时如何回到switch案例开头重新输入?
解决输入无效时重新要求输入的问题
你可以通过循环结构配合输入缓冲区清理来实现需求,修改后的代码如下:
switch(selectedOption){ case 'B': // 用do-while循环实现重复输入逻辑 do { printf("Please enter the first number\n"); // 尝试读取浮点数,成功则返回1 if (scanf("%f", &firstNumber) == 1){ printf("Is a valid number\n"); break; // 输入有效,跳出循环 } else { printf("Is not a valid number, please try again.\n"); // 清空输入缓冲区的无效字符,避免无限循环 while (getchar() != '\n'); } } while (1); // 持续循环直到输入有效 break; }
关键细节说明:
- do-while循环:保证输入请求至少执行一次,输入无效时自动回到开头重新请求输入。
- 清空输入缓冲区:当用户输入非数字时,这些无效字符会留在输入缓冲区里,如果不清理,下一次
scanf会直接读取这些字符,导致无限触发错误提示。while (getchar() != '\n');会逐个读取缓冲区里的字符,直到遇到换行符,彻底清空无效输入。 - break退出循环:当
scanf成功读取到有效浮点数时,立刻退出循环,继续执行case后续的逻辑。
内容的提问来源于stack exchange,提问作者ddawgio
相关产品推荐
相关产品推荐

