如果这太愚蠢了,我感到非常抱歉,但是我只是从c开始并进行一般的编码。我也很抱歉这是西班牙语,希望它不要太混乱。 我正在尝试使用矩阵对棋盘游戏进行编码,这时我只想能够打印棋盘。 我尝试使用Eclipse,但不断出现诸如command-gdb版本错误之类的错误。我还尝试在联机C编译器上运行它,但没有成功(在这种情况下,我得到了分段错误)。
#include <stdio.h>
#include <stdlib.h>
char *tablero[9][9];
char Rey = 'R';
char gralOro = 'O';
char gralPlata = 'P';
char caballos = 'C';
char lanceros = 'L';
char alfil = 'A';
char torre = 'T';
char peones = 'p';
char vacio = ' ';
char *piezasNegrasPerdidas[20];
char *piezasBlancasPerdidas[20];
void initBoard(){
for(int i = 0; i<0; i++){
for(int j = 0; j<9; j++){
if(i==2 || i==6){
tablero[i][j] = &peones;
}
else if(i==3 || i==4 || i==5){
tablero[i][j]=&vacio;
}
}
}
tablero[0][0] = &lanceros;
tablero[0][1] = &caballos;
tablero[0][2] = &gralPlata;
tablero[0][3] = &gralOro;
tablero[0][4] = &Rey;
tablero[0][5] = &gralOro;
tablero[0][6] = &gralPlata;
tablero[0][7] = &caballos;
tablero[0][8] = &lanceros;
tablero[1][1] = &alfil;
tablero[1][7] = &torre;
tablero[8][0] = &lanceros;
tablero[8][1] = &caballos;
tablero[8][2] = &gralPlata;
tablero[8][3] = &gralOro;
tablero[8][4] = &Rey;
tablero[8][5] = &gralOro;
tablero[8][6] = &gralPlata;
tablero[8][7] = &caballos;
tablero[8][8] = &lanceros;
tablero[7][1] = &alfil;
tablero[7][7] = &torre;
}
void printTablero(){
for (int r = 0; r < 9; r++){
for(int c = 0; c<9; c++){
printf("[%c]", *(tablero[r][c]));
}
printf("\n");
}
}
int main(){
printTablero();
return 0;
}
我希望能够运行这段代码,但是即使经过一些研究,我对可能出什么问题还是一无所知。
答案 0 :(得分:1)
尽管可以通过指向chars的2D指针数组来完成此操作,但我不建议这样做。取而代之的是,只具有2个字符数组:
char tablero[9][9]; // without the *
然后像这样更改初始化:
tablero[0][0] = lanceros; // without the &
印刷品到此:
printf("[%c]", tablero[r][c]);
此外,您的for (int i = 0; i < 0; i++)
循环永远不会运行。对其进行更改,以正确地初始化所有字段。我假设您想要一个嵌套循环,用于在此处将所有字段设置为vacio
。此外,您不会在任何地方致电initBoard
。我想应该在调用main
之前先在printTablero
中调用它。
最后,发生分段错误是因为您尝试取消引用在打印数组时未初始化的指针(因为未调用initBoard
,所以没有初始化),导致未定义行为。
答案 1 :(得分:0)
您没有对整个电路板的每个单元进行初始化。您只需使用vacio
对其进行初始化,然后将另一个设置为单元格即可。
#include <stdio.h>
#include <stdlib.h>
char * tablero[9][9];
char Rey = 'R';
char gralOro = 'O';
char gralPlata = 'P';
char caballos = 'C';
char lanceros = 'L';
char alfil = 'A';
char torre = 'T';
char peones = 'p';
char vacio = ' ';
char *piezasNegrasPerdidas[20];
char *piezasBlancasPerdidas[20];
void initBoard(){
for(int i = 0; i<9; i++){
for(int j = 0; j<9; j++){
if(i==2 || i==6){
tablero[i][j] = &peones;
}
else {
tablero[i][j]=&vacio;
}
}
}
tablero[0][0] = &lanceros;
tablero[0][1] = &caballos;
tablero[0][2] = &gralPlata;
tablero[0][3] = &gralOro;
tablero[0][4] = &Rey;
tablero[0][5] = &gralOro;
tablero[0][6] = &gralPlata;
tablero[0][7] = &caballos;
tablero[0][8] = &lanceros;
tablero[1][1] = &alfil;
tablero[1][7] = &torre;
tablero[8][0] = &lanceros;
tablero[8][1] = &caballos;
tablero[8][2] = &gralPlata;
tablero[8][3] = &gralOro;
tablero[8][4] = &Rey;
tablero[8][5] = &gralOro;
tablero[8][6] = &gralPlata;
tablero[8][7] = &caballos;
tablero[8][8] = &lanceros;
tablero[7][1] = &alfil;
tablero[7][7] = &torre;
}
void printTablero(){
for (int r = 0; r < 9; r++){
for(int c = 0; c<9; c++){
printf("[%c]", *(tablero[r][c]));
}
printf("\n");
}
}
int main(){
initBoard();
printTablero();
return 0;
}
输出:
[L][C][P][O][R][O][P][C][L]
[ ][A][ ][ ][ ][ ][ ][T][ ]
[p][p][p][p][p][p][p][p][p]
[ ][ ][ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ][ ][ ]
[p][p][p][p][p][p][p][p][p]
[ ][A][ ][ ][ ][ ][ ][T][ ]
[L][C][P][O][R][O][P][C][L]