C ++多逻辑运算符

时间:2014-05-07 12:47:07

标签: c++ winapi logical-operators

我是C / C ++的新手。我的应用程序的一部分似乎不像我想要的那样工作,但我无法理解为什么。

我要做的是当4键处于关闭状态时,我希望它能够执行“空闲”状态。功能。我希望空闲功能有2个结果。 如果向上或向下或向左或向右或LMouse AND RButton然后执行“运动”旋转操作'代码只是执行标准的空闲功能。 但是在我的代码中,它会在它向下循环但是move()只会返回0

我已经搞砸了一段时间并试图在谷歌上寻找答案,但我不明白为什么。

这是我的代码段:

int moving()
{
    int u = GetAsyncKeyState(VK_UP);
    int d = GetAsyncKeyState(VK_DOWN);
    int l = GetAsyncKeyState(VK_LEFT);
    int r = GetAsyncKeyState(VK_RIGHT);
    int mr = GetAsyncKeyState(VK_RBUTTON);
    int ml = GetAsyncKeyState(VK_LBUTTON);
    if(u == 1 || d == 1 || l == 1 || r == 1 || mr == 1 && ml == 1)
    {
        return 1;
    }
}

void idle()
{
    cout << "moving = " << moving() << endl;
    if(moving() == 1)
    {
        cout << "Movement rotation operating." << endl;
    }
    else
    {
        cout << "This is the idle statement" << endl;
    }

}

int main()
{
    while(1)
    {
    if(GetAsyncKeyState('4'))
        {
            cout << "4 Pressed" << endl;
            idle();
        }
    }
}

提前谢谢。

1 个答案:

答案 0 :(得分:1)

确定按钮组合的逻辑需要一组额外的括号。

if(u == 1 || d == 1 || l == 1 || r == 1 || (mr == 1 && ml == 1))

此外,1将评估为true,因此您可以说

if(u || d || l || r || (mr && ml))

您还可以让该函数返回bool,因为这真的是您所追求的。

bool moving()
{
    // ...
    // code for getting button states
    // ...
    return (u || d || l || r || (mr && ml))
}