【问题标题】:Way to check if the variable is value of something [duplicate]检查变量是否是某物的值的方法[重复]
【发布时间】:2018-10-19 15:54:16
【问题描述】:

有什么方法可以比 if 语句更快地检查变量是否等于某个值 ( m == value1 || m == value2 || m == value3...) 我试过 if m == ( value1 || value2 || ...) 但它只适用于第一个值。这是一个示例,它对 1 返回 true,但对 5 和其余部分不返回。我真的很感激所有的建议。泰!

#include <stdio.h>

int main(void){
    int m;
    scanf("%i", &m);
    if(m == (1 || 5 || 7 ||  8 || 11 || 20)){
    printf("TRUE\n");
    }
    else {
    printf("FALSE\n");
    }

    return 0;
}

【问题讨论】:

  • m == (1 || 5 || 7 || 8 || 11 || 20) 并没有按照你的想法去做......
  • 这是一个 c++ 骗子但完全相同的问题(和答案)
  • 对不起。我没有在 c++ 标签中查看。
  • 别抱歉。带有 C 标签的问题不存在。由于 C++,重复链接中的某些解决方案不适用,其他解决方案完全适用

标签: c variables if-statement


【解决方案1】:

|| 运算符在其两个操作数之间执行逻辑或。如果任一操作数非零,则计算结果为 1。在1 || 5 的情况下,它的计算结果为 1,因为至少有一个操作数非零。对于每个连续的 || 运算符,此评估将继续进行。

所以整个表达式 (1 || 5 || 7 || 8 || 11 || 20) 等于 1。

您的原始支票是执行此操作的正确方法。如果您想要少一些重复的内容,您可以使用带有失败案例的 switch 语句来做到这一点:

switch (m) {
case 1:
case 5:
case 7:
case 8:
case 11:
case 20:
    printf("true\n");
    break;
default:
    printf("false\n");
    break;
}

【讨论】:

  • 一般情况下它不是更快的方式。只是更少的按键,但执行时间相同。
  • 哦,这看起来不错,我不知道您不必为每种情况编写代码。谢谢!
  • @Real 有一个好的编译器,这种方法是最快的。使用弱编译器,最好寻找一个好的优化编译器。
【解决方案2】:

if(m == (1 || 5 || 7 || 8 || 11 || 20)) 实际上并没有做你认为它做的事情。首先,它计算(1 || 5 || 7 || 8 || 11 || 20) 的结果,即true (1)。然后它将m 与该结果进行比较。所以这仅在m 为 1 时有效。更简单的方法是使用 switch 语句:

switch(m) {
case 1:
  // do something
  break; // don't forget this
case 2:
  // do something
  break;
default:
  // do something when it's not any of the numbers you expect
  break;
}

在您的情况下,由于您想对所有这些数字执行相同的操作,只需在 case 语句之间省略 break;,它们都会被执行:

switch(m) {
case 1:
case 2:
  // do something (when it's 1 or 2)
  break;
default:
  // do something when it's not any of the numbers you expect
  break;
}

【讨论】:

    猜你喜欢
    • 2015-09-06
    • 2015-05-30
    • 2012-04-30
    • 1970-01-01
    • 2023-04-04
    • 2012-11-06
    • 2015-03-06
    • 2013-11-16
    • 2022-08-22
    相关资源
    最近更新 更多