If语句条件的问题

时间:2015-06-17 05:58:40

标签: c loops if-statement conditional-statements

我正在学习C,我的老师要求我的班级做一个Tic Tac Toe游戏。我设法做了大部分,但我有点卡住了。我已经制作了一个功能,目的是逐行检查线,如果发现所有线号都等于1或2,则游戏循环接收胜利号并停止。但是我在函数内部if的条件似乎有问题,我无法弄清楚它是什么。即使一行有一个数字,它也不会向游戏循环返回一个数字。我已尝试搜索if条件但我找不到错误。

这是功能:

int checkLines (int mat [3][3])
        {

            int i;
            int victory;

            for (i=0; i<3; i++)
            {
                      if ((mat [i][0] ==1) && (mat [i][1] ==1) && (mat [i][2] ==1))
                      {
                                 victory = 1;

                      } else if ((mat [i][0]==2) && (mat [i][1]==2) && (mat [i][2]==2))
                      {
                                 victory = 2;

                      }else
                      {
                           victory = 0;
                      }

            }
        return victory;
        }

5 个答案:

答案 0 :(得分:2)

这是因为您设置break后不会victory退出循环,这意味着循环将继续,然后将victory重置为零else部分。

实际上,不是设置victory而是打破循环,而是直接return,而在循环之后,你知道你没有&#34;胜利&#34;所以你总能在那里返回0

答案 1 :(得分:0)

在你的代码中即使在满足胜利条件后,for循环执行3次,基本上将victory的值标记为最后0

if语句中的任何一个匹配后,您需要停止循环。您可以在break;if块的末尾使用else if语句。

答案 2 :(得分:0)

你的循环总是通过你的所有矩阵。胜利时你必须打破你的循环!= 0.有一段时间而不是你可以做到。

int checkLines (int mat [3][3])
{
   int i=0;
   int victory = 0;
   while ((victory == 0) && (i<3))
   {
      if ((mat [i][0] ==1) && (mat [i][1] ==1) && (mat [i][2] ==1))
      {
         victory = 1;
      } 
      else if ((mat [i][0]==2) && (mat [i][1]==2) && (mat [i][2]==2))
      {
         victory = 2;
      }

      i++;
    }
    return victory;
}

记下你的代码没有关注对角线和垂直胜利。

答案 3 :(得分:0)

正如@JoachimPileborg已经指出的那样,如果你找到胜利,你需要从break循环中for

变化:

if ((mat [i][0] ==1) && (mat [i][1] ==1) && (mat [i][2] ==1))
{
    victory = 1;
} else if ((mat [i][0]==2) && (mat [i][1]==2) && (mat [i][2]==2))
{
    victory = 2;
}

为:

if ((mat [i][0] ==1) && (mat [i][1] ==1) && (mat [i][2] ==1))
{
    victory = 1;
    break;  // found a victory - break out of loop
} else if ((mat [i][0]==2) && (mat [i][1]==2) && (mat [i][2]==2))
{
    victory = 2;
    break;  // found a victory - break out of loop
}

答案 4 :(得分:0)

int checkLines (int mat [3][3])
        {

            int i;
            int victory; /* You get it then you are happy to leave */

            for (i=0; i<3; i++)
            {
                      if ((mat [i][0] ==1) && (mat [i][1] ==1) && (mat [i][2] ==1))
                      {
                                 victory = 1; break;

                      } else if ((mat [i][0]==2) && (mat [i][1]==2) && (mat [i][2]==2))
                      {
                                 victory = 2; continue;

                      }else
                      {
                           victory = 0; continue; 
                      }

            }
        return victory;
        }