我试图写一个找到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;
}
}
答案 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()
}