将变量与if语句中的值列表进行比较的更易读的方法是什么?

时间:2017-12-21 10:04:02

标签: c variables if-statement

如何将变量与if语句中相同类型的值列表进行比较,并使其可读且干净?

例如,我有以下内容,但有很多值,我想让它更具可读性。

if ((lst->type == 'p' || lst->type == 'x' || lst->type == 'X' ||
    lst->type == 'o' || lst->type == 'O' || (lst->type == 'd' ||
    lst->type == 'i' || lst->type == 'D'))

2 个答案:

答案 0 :(得分:5)

使用strchr函数处理此问题的最简单方法:

const char *lookups = "pxXoOdiD";
if (strchr(lookups, lst->type)){ 
    // Do your thing here to handle the condition
}

可以找到有关strchr的更多信息。

  

返回指向C字符串str。

中第一个字符出现的指针

答案 1 :(得分:1)

使用查找表,或使用switch语句:

const char lookup[] = {'p', 'x', 'X', 'o', 'O', 'd', 'i', 'D'};
for (int i = 0; i < sizeof(lookup)/sizeof(*lookup); i++){
    if (lst->type == lookup[i]) {
        // Your stuff
        break; // Remember to break
    }
}
switch (lst->type) {
    case 'p': case 'x': case 'X': case 'o':
    case 'O': case 'd': case 'i': case 'D':
        // Your stuff
}