如果测试,测试同一个多个条件?

时间:2016-03-11 22:19:58

标签: c if-statement logical-operators

我尝试使用谷歌搜索并失败。

使用C,我有一个IF语句。我想针对两个非连续值测试变量。

可以吗

  

if(state == 1 || 3)

含义如果state为1或state为3。

或者它必须是

  

if(state == 1 || state == 3)

我认为第一个实际意味着状态是1还是3,这意味着测试将始终为真(如果为真或真)。

有没有办法写这个而不必多次重写变量名?

不,我不想使用case / switch声明。我试图少打字。

3 个答案:

答案 0 :(得分:2)

你必须使用长变种

getOffSetTop : function(){
    var stickyNavBar = $(document).find('.stickynav');
    var offSetTop = stickyNavBar.offset().top;
    if(stickyNavBar.hasClass('fixed')){
        stickyNavBar.removeClass('fixed');
        offSetTop = $('.stickynav').offset().top;
        stickyNavBar.me.addClass('fixed');
    }
    return offSetTop;
}

始终评估为if (state == 1 || 3) ,因为它被解释为

true

编辑:

因为在评论中询问了C ++,M.M提到了运算符重载,C ++解决方案

if ((state == 1) || (3))

答案 1 :(得分:1)

@cde,' C'编程没有像第一种形式那样使用表达式的构造,所以你必须使用第二种形式,正如许多人已经提到的那样。

如果值在比较之前已知,则可以尝试以下方法:通过在声明时包含它们或者在稍后的时间填充值(可能是固定的或变量集,在这种情况下,数组必须动态分配,大小必须已经可用。)

注意:内联,静态,常量不是解决方案工作所必需的。此外,它具有以下优点:只要条件评估为真,函数就会跳过其余的比较,除非状态与任何给定状态都不匹配。

#include <iostream>

using namespace std;


inline bool isInKnownStates(int state, const int ds[], const int sz)
{
    int i = 0;

    for (; (i < sz) && (state != ds[i]); i++);

    return (i < sz);
}

int main(int argc, const char * argv[]) {

    static const int discrete_states[] = {1, 3};
    static const int sz = sizeof(discrete_states)/sizeof(discrete_states[0]);
    int state0 = 0;
    int state1 = 1;
    int state3 = 3;

    cout << state0 << " " << (isInKnownStates(state0, discrete_states, sz) ? "True" : "False") << endl << flush;
    cout << state1 << " " << (isInKnownStates(state1, discrete_states, sz) ? "True" : "False") << endl << flush;
    cout << state3 << " " << (isInKnownStates(state3, discrete_states, sz) ? "True" : "False") << endl << flush;

    return 0;
}

答案 2 :(得分:0)

  

有没有办法写这个而不必重写变量   多次命名?

嗯,是的。 #include <string.h>您可以使用

if(memchr(&(char []){1, 3}, state, 2))

0r

if(memchr(&(char []){1, 3, 5, 7, 9}, state, 5))

请注意,state不得包含超出char范围的值(可以根据需要指定签名),否则信息可能会丢失。 sizeof (T) != 1时,您不能使用类型为T的数组。还将考虑降低可读性。