を実行するprint_puzzle(create_puzzle(input))
と、出力の一番下に大量の gobbledegook が表示されますが、最後の行にのみ表示されます。なぜこれが起こり続けるのか、私にはわかりません。出力は、9 行の 9 つの数字であると想定されています (入力は、空のスペースを表すゼロを使用した数独パズルです)。
この一連のコードは、その入力を受け取り、文字列の 2 次元配列を作成し、print_puzzle を使用してそれらの文字列をグリッドに出力する必要があります。これらは文字列です。最終的には、正方形が取り得るすべての値を表示する方法を実装する予定だからです。しかし、今のところ、印刷すると、物事が台無しになります。81個の文字列すべてのすべての要素にnull値を入れてみましたが、文字列を印刷しようとすると、まだ台無しになります。道に迷いました!
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");
}
}