C井字游戏初学者
我发现一个分割错误-有什么建议吗?我正在尝试创建一个tic-tac-toe游戏,我刚刚开始用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'
#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(jchar 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]);
}