我收到了分段错误错误 - 有什么建议吗?我正在尝试创建一个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]);
}
}
}
答案 0 :(得分:2)
printf()
来调用未定义的行为。打印一个字符的格式说明符为%c
,而不是%s
。for
语句的使用是错误的,因此j
会过大而未定义的行为将通过访问数组的超出范围来调用。< / LI>
错误代码示例:
for (j<3; j++;)
{
printf("%s", row1[j]);
}
更正后的代码:
for (j=0; j<3; j++)
{
printf("%c", row1[j]);
}
使用row2
和row3
的循环需要进行相同的修正。
更多错误:
scanf("%s", &spot);
将调用未定义的行为:再次使用错误的说明符。应该使用%d
来读取整数。char x ="x";
和char o = "o";
不好,因为从字符串文字转换的指针转换的值应该没有意义。您应该使用字符常量,例如char x ='x';
和char o = 'o';
。row1[3]
不是有效对象,当声明为char row1[3];
时,您不能在那里写一些东西。你应该纠正
row1[spot] = x;
- &gt; row1[spot - 1] = x;
row2[spot - 3] = x;
- &gt; row2[spot - 4] = x;
row3[spot - 6] = x;
- &gt; row3[spot - 7] = x;
char row1[3] = " ";
之类的值之前初始化变量。也请像这样初始化row2
和row3
。答案 1 :(得分:1)
有很多问题。
开头 scanf("%s", &spot);
错误,因为spot
的类型为int
。您应该使用%d
。否则,它会调用undefined behavior。
之后,
char x ="x";
char o = "o";
也看起来不对,您要么需要char
初始值设定项(即'x'
和'o'
),要么想要将变量设置为指针类型并相应地更改代码。 / p>
接下来,Board[spot-1] = 1;
可能也是错误的,您将未绑定的索引值spot
用于绑定值9
。在将其用作索引值之前,您应该检查spot
的范围。