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

C语言中如何简化冗长的条件判断语句,实现更紧凑的写法?

问题解答

C 语言本身没有提供 Python 中切片、in 范围判断等效的语法糖,但可以通过以下几种方式在完全不改动原有判断逻辑的前提下,大幅缩短冗长的条件语句:

  • 第一种:直接用数值范围判断替换连续或运算
    你写的连续判断numberArray[1] == 1 || numberArray[1] == 2 || ... || numberArray[1] ==5本身就可以简化为范围判断numberArray[1] >=1 && numberArray[1] <=5,简化后的MasterCard分支条件为:
    else if (cardLength == 16 && numberArray[0] ==5 && numberArray[1] >=1 && numberArray[1] <=5)
    
  • 第二种:拼接前两位为整数做范围判断,和Python的写法逻辑完全一致
    把前两位数字拼接为两位数的整数,直接判断是否落在[51,55]区间即可:
    else if (cardLength == 16 && (numberArray[0] *10 + numberArray[1] >=51 && numberArray[0] *10 + numberArray[1] <=55))
    
  • 第三种:封装宏进一步简化多分支判断
    如果多个分支都要判断前缀,可以封装通用的前缀判断宏,后续所有分支都可以直接调用:
    // 定义前缀范围判断宏,arr为存储每一位数字的数组,start、end为要匹配的前缀闭区间
    #define MATCH_PREFIX(arr, start, end) ((arr[0] *10 + arr[1]) >= start && (arr[0] *10 + arr[1]) <= end)
    
    宏定义完成后,你的完整判断逻辑可以简化为(注:原代码if条件外层缺少括号,已补全修正语法错误):
    if (cardLength == 15 && (MATCH_PREFIX(numberArray, 34,34) || MATCH_PREFIX(numberArray, 37,37)))
    {
        printf("AMEX\n");
    }
    else if (cardLength == 16 && MATCH_PREFIX(numberArray, 51,55))
    {
        printf("MASTERCARD\n");
    }
    else if (cardLength == 13 && numberArray[0] ==4)
    {
        printf("VISA\n");
    }
    else
    {
        printf("INVALID\n");
    }
    
    这种写法代码可读性更高,后续新增卡种判断时也不需要重复写拼接逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:36:04