C 函数执行后,my int变量的值可以任意更改 我现在在一个编码任务的中间,在其中我们为反游戏(Othelo)创建一个游戏板,给它一些初始条件,并检查移动的合法性。
代码首先询问用户电路板的大小(边长),并使用一个函数初始化电路板,另一个函数打印电路板 我的代码适用于boardDim=4和boardDim=6,但是当我输入8时,在负责初始化电路板的函数执行其所有语句后,boardDim的值跳到了21568,这导致了一个分段错误注意:实验室讲义说,我们可以假设电路板的边长永远不会超过26 谢谢你的阅读 这是我的密码:C 函数执行后,my int变量的值可以任意更改 我现在在一个编码任务的中间,在其中我们为反游戏(Othelo)创建一个游戏板,给它一些初始条件,并检查移动的合法性。,c,C,代码首先询问用户电路板的大小(边长),并使用一个函数初始化电路板,另一个函数打印电路板 我的代码适用于boardDim=4和boardDim=6,但是当我输入8时,在负责初始化电路板的函数执行其所有语句后,boardDim的值跳到了21568,这导致了一个分段错误注意:实验室讲义说,我们可以假设电路板的边长永远不会超过26 谢谢你的阅读 这是我的密码: void InitBoard(char reversiBoard[][26], const int a) { for (int i =
void InitBoard(char reversiBoard[][26], const int a) {
for (int i = 0; i < a; i++) {
for (int j = 0; j < a; j++) {
if ((i == (a / 2 - 1)) && (j == (a / 2 - 1))) {
reversiBoard[i][j] = 'W';
}
else if ((i == (a / 2 - 1)) && (j == a / 2)) {
reversiBoard[i][j] = 'B';
}
else if ((i == a / 2) && (j == (a / 2 - 1))) {
reversiBoard[i][j] = 'B';
}
else if ((i == a / 2) && (j == a / 2)) {
reversiBoard[i][j] = 'W';
}
else {
reversiBoard[i][j] = 'U';
}
}
}
return;
}
void printBoardCurr(char reversiBoard[][26], const int a) {
char alphabet[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
printf(" ");
for (int i = 0; i < a; i++) {
printf("%c", (alphabet[i]));
}
printf("\n\n");
for (int j = 0; j < a; j++) {
printf("%c ", (alphabet[j]));
for (int k = 0; k < a; k++) {
printf("%c", reversiBoard[j][k]);
}
printf("\n");
}
return;
}
int main(void) {
int boardDim = 0;
printf("Enter the board dimension: ");
scanf(" %d", &boardDim);
char reversiBoard[boardDim][boardDim];
InitBoard(reversiBoard, boardDim);
printBoardCurr(reversiBoard, boardDim);
return 0;
}
void初始化板(字符反转板[][26],常数int a){
for(int i=0;i
void InitBoard(char reversiBoard[][26],const int a)
如果不将26
输入为维度,则该属性是错误的。您可以使用void InitBoard(const int a,char reversiBoard[][a])
。26
不是数组的最大大小,它是数组的确切大小。这些人把{
字符挂在行尾是怎么回事?太可怕了-把它自己放在一个新行上,就像结束的}
一样!该字符标记范围块的开始。它与if
、while
、函数声明等无关,不应与之一起使用。像这样离开,他们会被删除,不匹配,失去了屏幕的尽头和许多其他恼人的问题。请不要这样做。旁注:您根本不需要字母表
数组。如果所有函数都需要使用它,为什么reversiBoard
是一个局部变量?只需将其设置为全局变量,并将大小设置为最大大小(26 x 26)。这会让一切变得更好,因为你没有把它放在任何地方。@mch这让我很惊讶。AFAIK数组总是按地址传递,而不是按值传递。但是,我想你是在正确的轨道上。函数InitBoard()
将始终采用“内部尺寸”26,其中main()
可根据请求调整尺寸。因此,InitBoard()
中的指针算法将失败。