C循环 - 检查功能

时间:2015-02-20 21:44:04

标签: c while-loop boolean

我正在尝试在C中编写一个Tic-Tac-Toe程序,并且有一个while循环,用于检查游戏板是否已填满。如果是这样,循环将会中断,结果将是猫的游戏。

我还有一个函数boardFull,它将我的2D游戏板作为参数,并检查每个单元格为-1,表示该空格为空。

出于某种原因,我在程序运行时进入循环,但在填满一个空格后,循环中断,我的程序结束。我正确使用while吗?

代码段:

    while(boardFull(board) != -1)
    {
       if((turn % 2) == 0)
       {
        printf("Player One's turn.\n");
        marker = 1;
       }
       else
       {
        printf("Player Two's turn.\n");
        marker = 0;
       }   

       printf("Which row? ");
       scanf("%i", &row);

       printf("Which column? ");
       scanf("%i", &column);

       if(board[row][column] != -1)
       {
           while(board[row][column] != -1)
           {
            printf("Space already taken. Try again.\n");

            printf("Which row? ");
            scanf("%i", &row);

            printf("Which column? ");
            scanf("%i", &column);

            printf("\n");
           }
       }
       else
        board[row][column] = marker;

       drawBoard(board);

       turn++;
     }

这是我的boardFull方法......

int boardFull(int board[3][3])
{
   int i, j;

   for(i = 0; i < 3; i++)
   {
       for(j = 0; j < 3; j++)
       {
           if(board[i][j] != -1)
               return 0;
       }
   }

   return -1;
}

1 个答案:

答案 0 :(得分:1)

  1. 您应该使用boolean函数的boardFull返回值(请参阅this post)。它更具可读性和易懂性。
  2. boardFull函数找到第一个非空单元格时,它返回0(假设该值代表false)。这是错的。如果任何单元格 为空,则应返回0。
  3. 您的while循环条件对我来说很合适。但是,如果您使用boolean返回值,则会看起来更好while (!boardFull(...))