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

C语言中如何让switch的default分支在输入非法值时触发?

解决C语言最大值程序非法输入判断问题

原程序试图通过switch分支处理非法输入,但实际输入浮点数、字符等非整数值时,程序会输出随机的“最大值”,无法触发default分支。这是因为scanf("%d%d")在遇到非整数输入时,会停止匹配,未成功赋值的变量a或b会保留随机垃圾值,导致c = a > b的结果只能是0或1,永远走不到default分支。

修改方案

要实现非法输入时输出指定错误信息,需要从输入有效性检查和缓冲区清理两方面调整代码:

  • 检查scanf的返回值:scanf的返回值代表成功读取的变量个数,我们需要读取2个整数,只有返回值为2时,才说明输入是有效的两个整数。
  • 清空输入缓冲区:如果输入无效,残留的非法字符会留在缓冲区中,需要彻底清空,避免影响后续操作。
  • 调整逻辑分支:仅当输入有效时,才执行最大值判断;输入无效时直接输出错误信息。

修改后的完整代码

#include <stdio.h>

int main()
{
    int a, b, c;
    // 获取scanf的返回值,判断是否成功读取2个整数
    int input_result = scanf("%d%d", &a, &b);

    if (input_result == 2) {
        c = a > b;
        switch (c)
        {   
          case 0:
            printf("%d is maximum\n", b);
            break;

          case 1:
            printf("%d is maximum\n", a);
            break;
        }
    } else {
        // 清空输入缓冲区的残留字符
        while(getchar() != '\n');
        printf("Invalid Input\n");
    }

    return 0;
}

代码说明

  1. 输入有效性判断:通过input_result == 2确认用户输入了两个合法整数,只有此时才执行最大值判断逻辑。
  2. 缓冲区清理:while(getchar() != '\n')会逐个读取缓冲区中的字符,直到遇到换行符,确保后续输入不受残留字符干扰。
  3. 错误处理:输入无效时直接输出"Invalid Input",无需进入switch分支。

内容的提问来源于stack exchange,提问作者Mazin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:37:45