检查变量是否为某物的值的方法

时间:2018-10-19 15:54:16

标签: c variables if-statement

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

#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;
}

2 个答案:

答案 0 :(得分:2)

||运算符在其两个操作数之间执行逻辑或。如果两个操作数都不为零,则计算结果为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;
}

答案 1 :(得分:2)

int checkmax(int a[], int n) { int max=a[0]; for(i=0;i<n;i++); { if(a[i]>max) max=a[i]; } return max; //printf("max = %d", max); } /*void printmax() { if(checkmax(a,n)==max) printf("max = %d", max) }*/ int main() { int n; printf("Enter number of elements => "); scanf("%d",&n); int *a=(int*)calloc(n,sizeof(int)); inputarray(a,n); checkmax(a,n); //printf("max = %d", max); getchar(); getchar(); } 实际上并没有按照您的想象去做。首先,它计算if(m == (1 || 5 || 7 || 8 || 11 || 20))的结果(1 || 5 || 7 || 8 || 11 || 20)。然后将true (1)与该结果进行比较。因此,这仅在m为1时有效。更简单的方法是switch语句:

m

在您的情况下,由于您希望对所有这些数字执行相同的操作,因此只需在case语句之间省略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; } 即可执行它们:

break;