可扩展的if语句条件

时间:2019-08-01 02:11:15

标签: c if-statement

我想知道是否可以创建可扩展性更高的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语句的方法,而无需每次复制并粘贴变量名吗?

2 个答案:

答案 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);
}