当我运行时print_puzzle(create_puzzle(input))
,我在输出的底部得到一堆 gobbledegook,只在最后一行。我不知道为什么这种情况不断发生。输出应该是 9 行,每行 9 个数字(输入是一个数独游戏,零代表空格)。
这一堆代码应该接受该输入,创建一个二维字符串数组,然后使用 print_puzzle 将这些字符串打印在一个网格中。它们是字符串,因为最终我将实现一种方法来显示正方形可能的所有值。但是现在,当我把它打印出来时,事情就搞砸了。我什至尝试将空值放在所有 81 个字符串的每个元素中,但是在打印字符串时它仍然搞砸了。我迷路了!
typedef struct square {
char vals[10]; // string of possible values
} square_t;
typedef struct puzzle {
square_t squares[9][9];
} puzzle_t;
static puzzle_t *create_puzzle(unsigned char vals[9][9]) {
puzzle_t puz;
puzzle_t *p = &puz;
int i, j, k, valnum;
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++) {
puz.squares[i][j].vals[0] = '\0';
puz.squares[i][j].vals[1] = '\0';
puz.squares[i][j].vals[2] = '\0';
puz.squares[i][j].vals[3] = '\0';
puz.squares[i][j].vals[4] = '\0';
puz.squares[i][j].vals[5] = '\0';
puz.squares[i][j].vals[6] = '\0';
puz.squares[i][j].vals[7] = '\0';
puz.squares[i][j].vals[8] = '\0';
puz.squares[i][j].vals[9] = '\0';
valnum = vals[i][j] -'0';
for (k = 0; k < 10; k++){
if ((char)(k + '0') == (char)(valnum + '0')){
char tmpStr[2] = {(char)(valnum +'0'),'\0'};
strcat(puz.squares[i][j].vals, tmpStr);
}
}
}
}
return p;
}
void print_puzzle(puzzle_t *p) {
int i, j;
for (i=0; i<9; i++) {
for (j=0; j<9; j++) {
printf(" %2s", p->squares[i][j].vals);
}
printf("\n");
}
}