C++ C++;多重逻辑运算符

C++ C++;多重逻辑运算符,c++,winapi,logical-operators,C++,Winapi,Logical Operators,我对C/C++相当陌生。我的应用程序中有一部分似乎不能按我所希望的那样工作,但我不明白为什么 我要做的是,当4键处于down状态时,我希望它执行“idle”功能。我希望空闲函数有两个结果。 如果向上或向下、向左或向右或LMouse和RB按钮,则执行“移动-旋转操作”代码,否则仅执行标准怠速功能。 但是,在我的代码中,它将在关闭时循环此操作,但moving()将只返回0 一段时间以来,我一直在搞乱它,试图在谷歌上寻找答案,但我不明白为什么 以下是我的代码片段: int moving() {

我对C/C++相当陌生。我的应用程序中有一部分似乎不能按我所希望的那样工作,但我不明白为什么

我要做的是,当4键处于down状态时,我希望它执行“idle”功能。我希望空闲函数有两个结果。 如果向上或向下、向左或向右或LMouse和RB按钮,则执行“移动-旋转操作”代码,否则仅执行标准怠速功能。 但是,在我的代码中,它将在关闭时循环此操作,但moving()将只返回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();
        }
    }
}
int移动()
{
int u=GetAsyncKeyState(VK_UP);
int d=GetAsyncKeyState(VK_向下);
int l=GetAsyncKeyState(VK_左);
int r=GetAsyncKeyState(VK_RIGHT);
int mr=GetAsyncKeyState(VK_RBUTTON);
int ml=GetAsyncKeyState(VK_LBUTTON);
如果(u==1 | | d==1 | | l==1 | | r==1 | | mr==1&&ml==1)
{
返回1;
}
}
无效空闲()
{

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

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))
}

您应该在if之后的函数中添加另一个return(
return 0
)。此外,请查看
GetAsyncKeyState
函数的文档:-它将返回的不是1,而是一些代码“如果设置了最高有效位,则按键关闭,如果设置了最低有效位,则按键在上一次调用后按下”。与else中一样{return 0}在moving部分中的第一个if()语句上?除了第一条注释之外。我将始终确保
int SomeFunction()
总是显式返回0,如果它还没有返回其他内容。也许我应该只使用GetKeyState函数?他的变量是
int
,而不是
bool
,因此
1
将是1。(另一方面,这可能不是他想要的。)但对于最终版本,+1,只有一个
return
(尽管外圆括号是多余的)。是的,它们将是1,但当您执行逻辑运算时,例如
if(1&&1)
您将得到一个布尔结果,
true
。相反,
0
将以相同的方式计算为
false
。由于我的代码的其他部分将使用1的返回值,我想我现在将它保留为int,但作为一个选项知道它非常好。这解决了我的问题。谢谢