tictactoe函数不接受输入值

时间:2014-11-07 13:12:42

标签: c arrays function

我试图写一个找到tictactoe获胜者身份的函数。但是,我有一个错误,我无法找到它。当我通过控制台粘贴输入值时,它会关闭终端并且不会占用输入的最后一部分(O X O)。你能告诉我我的错在哪里吗?谢谢你们所有赞赏的答案。 put中的示例是:

3
X
X O X
X X X
O X O

#include <stdio.h>

char result(char board[][3]);
void test_part1();


int main(){

    test_part1();

    return 0;
}
char result(char board[][3]){

    char winner = 'T';
    int i;

// Checks for:
//     X X X
    for (i = 0; i < 3; i++)
            if (//bla bla)
        return winner;
        }

// Checks for:
// X
// X
// X
    for (i = 0; i < 3; i++)
                if (//bla bla)
                return winner;
        }

// Checks for:
// X                 X
//   X      or     X
//     X         X
    if (//bla bla)
            return winner;
        }
            return winner;
}
void test_part1(){

    int size;
    char ch;
    int i,j;
    char tictac[3][3];

    scanf("%d",&size);
        if(size==3){
    scanf("%c",&ch);
    for(i=0;i<size;i++)
    for(j=0;j<size;j++)
        scanf("%c",&tictac[i][j]);
    if(ch==(result(tictac)))
        printf("Win\n");
    else if('T'==(result(tictac)))
        printf("Draw\n");
    else
        printf("Lost\n");
    }
    else{
        printf("Size is must be 3\n");
        return;
    }


}

2 个答案:

答案 0 :(得分:1)

您需要在%c中的scanf之前添加一个空格,以便它们看起来像这样:

scanf(" %c",&ch);
scanf(" %c",&tictac[i][j]);

这样做是为了跳过在输入\n的数据后按下的换行符(scanf或回车键)。 \n仍将出现在输入缓冲区中,下一个scanf将使用%c,因此不会等待您输入任何内容。 %c之前的空格将丢弃所有空格(空格,换行符等)。

答案 1 :(得分:0)

随着tictac网格的大小始终为3x3,建议如下:

注意:此算法不区分下一个玩家要播放的内容,也不区分输入是'x'还是'o'。该算法不允许玩家选择3x3网格中的哪个方格来接收他们的输入。

我建议修改算法让两个玩家(一个可能是计算机)并让(当前)玩家将他们的标记放在他们想要的位置。

void test_part1()
{

    char ch; // input value from user
    int i;   // loop counter
    int j;   // loop counter
    char tictac[3][3];

    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            if( 1 != scanf(" %c",&tictac[i][j]) )
            {
                 handle error and exit
            }

            // implied else

           if(ch==(result(tictac)))
           {
               printf("Win by &c\n", ch);
           }

           else if('T'==(result(tictac)))
           {
               printf("Draw\n");
           }
           else
           {
               printf("Lost\n");
           } // end if-else
       } // end for()
   } // end for()

}