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

计算器作业:输入非法时如何回到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:30:41