【问题标题】:Single line comparison to several values in C与 C 中的多个值进行单行比较
【发布时间】:2016-11-17 09:48:17
【问题描述】:

例如,也许我们有一个 if 语句想要检查一个变量是否等于 4 个不同的值,可能类似于

    if(x == 1,2,3,4){ do something }

在 C 中执行此操作的正确语法是什么?我知道逗号可以在其他语言中使用,我似乎无法弄清楚如何没有几个不同的 if 检查。我唯一能想到的另一件事就是不得不做

    if((x == 1)||(x ==2)

但毫无疑问,我会拥有超过 4 个,这会很快变得烦人。我没有看到任何其他类似的问题,如果您知道,请指出我。

【问题讨论】:

  • 不幸的是,这就是 C 的工作方式。您必须分别检查每个组合。
  • 问题是C接近硬件。您的 CPU 无法同时将一个值与多个值进行比较,这是不可能的。在具有“如果 x 在 [1 到 n] 区间内”之类的高级语言中,您最终仍然会得到类似于 if(x == item[0] || == item[1] ... 的机器代码。高级语言对程序员隐藏了这种低效率,而 C 不会试图粉饰它。
  • 啊,是的,我一直忘记关于 C 的这一点以及我尝试学习它的原因。谢谢@Lundin

标签: c syntax compare


【解决方案1】:

如果值是恒定的,我会用开关来做:

switch(x)
{
    case 1:
    case 2:
    case 3:
    case 4:
        //do something
        break;
}

如果数字是连续的,您可以使用if (x >= 1 && x <= 4)

【讨论】:

    【解决方案2】:

    首先,速记as mentioned by mch in the other answer

     if ( (x >= 1 && x <= 4) || (x >= 10 && x <= 40) || ....) //whatever condition
    

    否则,(不是单行比较)如果您可以使用 gcc 扩展,则有一个名为 case-range 的功能。

    在那里,您可以指定一个范围的值。类似的东西

     case 1 ... 5:
    

    将是有效的。

    最后,一个失败的switch 案例也可能会派上用场,比如

    switch(val)
    {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
               break;
    
        case 6:
        case 7:
    
               break;
    
        default:
    
                break;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      相关资源
      最近更新 更多