输入 if 语句,尽管不满足条件

Entering If Statement Despite Not Meeting Condition

本文关键字:不满足 条件 if 语句 输入      更新时间:2023-10-16
这是一个

特定的问题,但我似乎无法弄清楚出了什么问题。

else if (X == 2)
        //move left
    {
        if (Level[X-1][Y] == 0);
        {
            cout << Level[X-1][Y] << "n";
            cout << "n MOVING LEFT from RIGHTn";  //PROBLEM IS HERE
            Level[X][Y] = 1; // block it
            X = X - 1;
            moved = 1;
        }
    }

我正在做的是检查 Level[X-1][Y] 是否为 1,表示一列,所以我无法将我的玩家移动到那里。但是,由于某种原因,尽管它是 1 而不是 0(如输出所示),仍可访问 IF 语句。任何帮助将不胜感激。

你的问题在这里:

if (Level[X-1][Y] == 0);
                       ^

;结束 if 语句。if 语句后面的内容只是一个复合语句,如下所示:

{
  //Code
}
并且

本身完全有效并且有许多用途,其中一个用途是创建块范围

为了完整起见,如果我们转到表达式语句6.2 C++标准部分的草案,我们看到;只是终止了一个 null 语句。语法如下:

expression-statement:
  expressionopt ;
                ^                        

它还说:

[...]缺少表达式的表达式语句称为 null 语句。[...]

分号!!

   if (Level[X-1][Y] == 0);
if (Level[X-1][Y] == 0);
//                     ^

去掉这个分号。

它会使逻辑如下:如果Level[X-1][Y]为零,则不执行任何操作,然后运行以下代码(您认为属于if的复合语句)。它相当于:

if (Level[X-1][Y] == 0)
{
    ;
}
{
    cout << Level[X-1][Y] << "n";
    cout << "n MOVING LEFT from RIGHTn";
    Level[X][Y] = 1;
    X = X - 1;
    moved = 1;
}