我想知道是否可以创建可扩展性更高的if语句。如果我们有一个条件,即一个变量可能是要满足if语句的多个不同值之一,则我尝试了以下这种格式:
这是默认答案。
if (variable == 23
|| variable == 52
|| variable == 58
|| variable == 62
|| variable == 93)
{
some function
}
这就是我想象中的C语言的新手。
if (variable == (23,52,58,62,93)
{
some function
}
但是,使用逗号方法,我会得到一条警告,
warning: expression result unused [-Wunused-value]
有人可以编写一个具有多个可能条件的变量的if语句的方法,而无需每次复制并粘贴变量名吗?
答案 0 :(得分:5)
您可以使用switch
来根据常量表达式检查变量的值。在这里,我们将"fall through"从一个匹配的大小写转移到另一个匹配的大小写。
switch(variable) {
case 23:
case 52:
case 58:
case 62:
case 93:
printf("Match!\n");
break;
default:
printf("No match.\n");
}
请注意,这仅适用于“整数类型”,即包括char
和指针的整数。它不适用于float
或字符串。
由于它们执行相同的操作,因此优秀的优化编译器将if (variable == 23 || variable == 52 || ... )
和等效的switch
编译为相同的机器代码,并且它们将执行完全相同的操作。
答案 1 :(得分:-2)
更新的C答案
我没有注意到C标签,所以这里是更新的答案
int data[] = { 23, 52, 58, 62, 93 };
int found = 0;
for (int i = 0; i != sizeof data / sizeof *data; ++i)
{
if (data[i] == variable)
{
found = 1;
break;
}
}
与我最初的C ++答案一样,您可以将代码放入函数中。但是,如果数组与调用点不同,则需要将指针传递给数组的开头及其大小。
原始答案(C ++):
类似的东西:
int data[] = { 23, 52, 58, 62, 93 };
if (std::find(std::begin(data), std::end(data), variable) != std::end(data))
printf("Match!\n");
else
printf("No match.\n");
可以解决问题。
一种改进是将其放入函数中
bool find_match(int variable) const // const only for member function
{
static int data[] = { 23, 52, 58, 62, 93 }; // remove static if data can change.
return std::find(std::begin(data), std::end(data), variable) != std::end(data);
}