有什么方法可以比如果我尝试( 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;
}
答案 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;