C井字游戏初学者

C井字游戏初学者,c,scanf,C,Scanf,我发现一个分割错误-有什么建议吗?我正在尝试创建一个tic-tac-toe游戏,我刚刚开始用C语言编程。任何建议都会很有帮助。我只想把它打印到终端上,现在没有图形 #include <stdio.h> int main() { int Board[9]; char row1[3]; char row2[3]; char row3[3]; int j = 0; int turns = 0; char x; x = 'x'

我发现一个分割错误-有什么建议吗?我正在尝试创建一个tic-tac-toe游戏,我刚刚开始用C语言编程。任何建议都会很有帮助。我只想把它打印到终端上,现在没有图形

#include <stdio.h>

int main()
{
    int Board[9];
    char row1[3];
    char row2[3];
    char row3[3];
    int j = 0;
    int turns = 0;
    char x;
    x = 'x';
    char o;
    o='o';
    int spot;
    printf("Hello, and welcome to Christian's Tic Tac Toe game\n");
    printf("Here's how it works: X goes first and chooses a place(1-9 corresponding to a place on the board)\n");
    printf("First to get 3 in a row wins. Have fun!\n");
    printf("X goes first where do you want to go?");
    scanf("%d", &spot);
    Board[spot-1] = 1;
    turns = 1;
    if (spot <=3)
    {
         row1[spot-1] = x;
         for (j =0; j<3; j++)
         {
             printf("%c", row1[j]);

         }
         for (j =0; j<3; j++)
         {
             printf("%c", row2[j]);

         }
         for (j=0; j<3; j++)
         {
             printf("%c", row3[j]);

         }
    }
    else if(spot >3 && spot <=6)
    {
         row2[spot - 4] = x;
         for (j =0; j<3; j++)
         {
             printf("%c", row1[j]);

         }
         for (j =0; j<3; j++)
         {
             printf("%c", row2[j]);

         }
         for (j=0; j<3; j++)
         {
             printf("%c", row3[j]);

         }
    }
    else
    {
         row3[spot - 7] = x;
         for (j =0; j<3; j++)
         {
             printf("\n%c", row1[j]);

         }
         for (j =0; j<3; j++)
         {
             printf("%c", row2[j]);

         }
         for (j=0; j<3; j++)
         {
             printf("%c", row3[j]);

         }
    }
}
#包括
int main()
{
int板[9];
字符行1[3];
char-row2[3];
char-row3[3];
int j=0;
整数匝数=0;
字符x;
x='x';
查尔o;
o='o';
内点;
printf(“你好,欢迎来到Christian的Tic-Tac-Toe游戏\n”);
printf(“其工作原理如下:X首先选择一个位置(1-9对应于电路板上的一个位置)\n”);
printf(“第一个连续三次获胜。玩得开心!\n”);
printf(“X先去你想去哪里?”);
scanf(“%d”、&spot);
板[spot-1]=1;
匝数=1;

如果(点有很多问题。首先

 scanf("%s", &spot);
是错误的,因为
spot
的类型为
int
。您应该使用
%d
进行此操作。否则,它将调用

此后,

char x ="x";
char o = "o";
看起来也是错误的,您可能需要一个
char
初始值设定项(即
'x'
'o'
),或者希望将变量设置为指针类型并相应地更改代码

接下来,
Board[spot-1]=1;
也可能是错误的,您将未绑定的索引值
spot
用于绑定值
9
。在将其用作索引值之前,您应该检查
spot
的范围

另请参见

  • 通过将类型错误的数据传递到
    printf()
    ,调用了未定义的行为。打印一个字符的格式说明符是
    %c
    ,而不是
    %s
  • 您对
    for
    语句的使用是错误的,因此
    j
    将太大,未定义的行为将通过访问数组的范围之外来调用
错误代码示例:

for (j<3; j++;)
{
    printf("%s", row1[j]);
}

for(j
char x=“x”char o=“o”
是非常错误的….
printf(“%s”,第1行[j]
也是错误的。问题太多了。你需要一本好的C语言书。@Johan绝对不会。这段代码是错误的,请在建议迁移之前阅读代码审查主题。是的,感谢你为愚蠢的错误澄清:只有
Board[0]
Board[8]
可用。你不能使用
Board[9]
(严格地说,指针
&Bound[9]
是有效的,但是你不能取消引用)。我更新了代码,现在我只是把胡言乱语打印到terminal@christian使用具有自动存储持续时间(不确定)的未初始化变量的值调用未定义的行为。
for (j=0; j<3; j++)
{
    printf("%c", row1[j]);
}