0

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

else if (X == 2)
        //move left
    {
        if (Level[X-1][Y] == 0);
        {

            cout << Level[X-1][Y] << "\n";
            cout << "\n MOVING LEFT from RIGHT\n";  //PROBLEM IS HERE

            Level[X][Y] = 1; // block it
            X = X - 1;
            moved = 1;
        }
    }

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

4

3 回答 3

10

你的问题在这里:

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

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

{
  //Code
}

并且它们本身是完全有效的,并且有很多用途,其中一种用途是创建块作用域

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

expression-statement:
  expressionopt ;
                ^                        

它还说:

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

于 2013-10-22T00:58:16.670 回答
6

分号!!!

   if (Level[X-1][Y] == 0);
于 2013-10-22T00:56:43.587 回答
4
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 RIGHT\n";
    Level[X][Y] = 1;
    X = X - 1;
    moved = 1;
}
于 2013-10-22T00:58:07.660 回答