尽管不符合条件但仍要输入陈述

时间:2013-10-22 00:51:21

标签: c++ if-statement

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

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

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

3 个答案:

答案 0 :(得分:10)

你的问题在这里:

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

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

{
  //Code
}

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

为了完整起见,如果我们转到草稿C++ standard section 6.2 表达式语句,我们会看到;只是终止 null语句。语法如下:

expression-statement:
  expressionopt ;
                ^                        

它还说:

  

[...]带有表达式missing的表达式语句称为空语句。[...]

答案 1 :(得分:6)

半结肠!!!

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

答案 2 :(得分: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;
}