如何在C中写“如果x等于5或4或78或……”

我有一个关于在if语句中使用逻辑运算符的快速问题。

目前我有一个if语句检查x是否等于5或4或78:

if ((x == 5) || (x == 4) || (x == 78)) { blah } 

我想知道我是否可以将所有内容浓缩为:

 if (x == 5 || 4 || 78) { blah } 

对不起这个基本问题,我刚开始学习C.

没有快捷方式,但您需要修复等于运算符。

 if ((x == 5) || (x == 4) || (x == 78)) { 

首先,你在ifs中使用的是赋值而不是相等的测试。 第一种方法(对于相等的替换是合适的)是进行测试的最佳方法,但是如果你有很多可能的选择,那么可能有更好的方法。 第二种方式可能会编译,但它不会做你想要的,它总是会返回true,因为4和78都评估为true,你正在做的是评估5(分配5到x的结果)或4或78是真的。 switch语句可能是一种可能的替代方法。

 switch (x) { case 4: case 5: case 78: blah... break; default: } 

不,你不能和等于的测试是== ,而不是=

if语句没有捷径,但我建议考虑:

 switch (x) { case 4: case 5: case 78: /* do stuff */ break; default: /* not any of the above... do something different */ } 

@uncle brad是现货,但后来你可能会学到一些叫做switch语句的东西。 它看起来很时髦,但经常用于这些类型的情况(变量的几个可能值都具有相同的效果):

 switch (x) { case 4: case 5: case 78: // ... break; } 

虽然你只想在if语句的含义不太明确的情况下使用switch语句 – 但是现在大多数编译器都足够聪明,可以生成最佳的机器代码。

不,对不起,你不能; 你必须把所有的表达都写出来。 对于要比较的很长的数字列表,您可以将数字放在一个数组中,然后遍历列表; 但是在开始看起来像个好主意之前你必须要有十几个数字。

不,您不能在C中执行此操作。您的第一个代码示例也不正确。 在C中赋值( = )和等价( == )之间有一个重要的区别。当你在表达式中写x = 5时,这实际上会在逻辑OR之前编译并计算为0或1(false或true)编辑表达式的下一部分!

您的第二个代码示例也是有效的C,但它不会执行您希望它执行的操作。 您将该语句读作“(x指定为5)或真或假”。 这是因为C中的任何非零值在逻辑上都是真的。 因此,x将包含值5,并计算为true,使得if条件为真。 由于|| ,表达式的其余部分无关紧要 操作员短路。

它在我登录时已经得到了回答,但您可以使用该开关,并将其分解为一个function

 int isValid(int toCheck) { switch(toCheck) { case 4: case 5: case 78: return 1; default: return 0; } } 

然后,每次需要根据已建立的案例检查int时,您只需调用该方法。

不可否认,这个例子相当愚蠢,但是对于更多的案例选择和重复评估的案例,你可以做这样的事情来简化和重用一些代码。

另一个想法是:虽然没有“快捷方式”,但是如果你有很多数字,那么代码长度和输入完整性可能会更容易将它们全部放入数组并在循环中检查数组。 如果必须多次与多个数字进行比较,请在数组中对它们进行排序并使用二进制搜索。

但是,对于3个数字,你必须采用“长”的方式。

如果它是一个很长的列表,你可以做for循环,但是如果它没有真正处理逻辑运算符:-…

 #include  int forbiddenList[13] = {5, 4, 78, 34, 23, 56, 4, 7, 6, 4, 33, 2333, 0}; int length = 13; int main() { int mysteryNum; printf("type a number: "); scanf("%d",&mysteryNum); int i; for (i = 0; i <= length; i ++) { int target = forbiddenList[i]; if (mysteryNum == target) { printf("You have chosen of the forbidden list!\n"); printf("YOU SHALL NOT PASS!!\n"); } } return 0; } 

呃...没有做过......永远......你应该拿C ++ ......

 int preconditions[] = { 4,5,78 }; // it should be in most likely order int i = 0; for(;i<3;++i) { if( x == preconditions[i] ) { // code here. } }