我需要帮助打印一个8x8网格在C。
典型的1x1网格应该如下所示:
+----+
| |
| |
| |
+----+
但是,即使我检查了所有可能导致问题的因素,我也不能理解。
你们能检查一下代码并告诉我问题出在哪里吗?
int main() {
row_count = 2;
col_count = 2;
strcpy(row0NoX, "-----+");
strcpy(row1NoX, " |");
strcpy(row2NoX, " |");
strcpy(row3NoX, " |");
strcpy(row4NoX, "-----+");
printf("Welcome to the Checkerboard program!\n");
for (row = 0; row < row_count; row++) {
for (tiny_row = 1; tiny_row < N_ROWS; tiny_row++) {
printf("%c", row0NoX[strlen(row0NoX)-1]);
printf("%c", row1NoX[strlen(row1NoX)-1]);
printf("%c", row2NoX[strlen(row2NoX)-1]);
printf("%c", row3NoX[strlen(row3NoX)-1]);
printf("%c", row4NoX[strlen(row4NoX)-1]);
for (col = 0; col < col_count; col++) {
switch (checkerboard[row][col]) {
case 0:
switch (tiny_row) {
case 1:
printf("%s", row0NoX);
break;
case 2:
printf("%s", row1NoX);
break;
case 3:
printf("%s", row2NoX);
break;
case 4:
printf("%s", row3NoX);
break;
case 5:
printf("%s", row4NoX);
break;
default:
printf("Error");
break;
}
break;
}
}
printf("\n");
}
}
//printf("Enter a command: ");
return (0);
}
输出很接近,但不知何故我遗漏了|和末尾的+-+。
2x2的输出:
+|||+-----+-----+
+|||+ | |
+|||+ | |
+|||+ | |
+|||+-----+-----+
+|||+-----+-----+
+|||+ | |
+|||+ | |
+|||+ | |
+|||+-----+-----+
发布于 2011-03-06 15:30:07
您忘记在行之间打印换行符:
for (tiny_row = 1; tiny_row < N_ROWS; tiny_row++) {
printf("%c", row0NoX[strlen(row0NoX)-1]);
for (col = 0; col < 8; col++) {
switch (checkerboard[row][col]) {
case 0:
switch (tiny_row) {
case 1:
printf("%s", row0NoX);
break;
case 2:
printf("%s", row1NoX);
break;
case 3:
printf("%s", row2NoX);
break;
case 4:
printf("%s", row3NoX);
break;
case 5:
printf("%s", row4NoX);
break;
default:
printf("Error");
break;
}
break;
}
// printf("\n"); <-- Not here
}
printf("\n") // <-- Here
}
此外,您还忘了在底部打印“-”行。
发布于 2011-03-06 15:35:30
像这样的东西?
#define BLOCK_SIZE_X 5
#define BLOCK_SIZE_Y 4
void draw_box(int w, int h) {
int x, y;
for (y = 0; y <= h * BLOCK_SIZE_Y; y++) {
int on_horizontal = !(y % BLOCK_SIZE_Y);
for(x = 0; x <= w * BLOCK_SIZE_X; x++) {
int on_vertical = !(x % BLOCK_SIZE_X);
if (on_horizontal && on_vertical) {
printf("+");
} else if (on_horizontal) {
printf("-");
} else if (on_vertical) {
printf("|");
} else printf(" ");
}
printf("\n");
}
}
发布于 2011-03-06 18:43:55
我认为你的新问题在这一行:
(tiny_row = 1;tiny_row < N_ROWS;tiny_row++) {
我猜N_ROWS
被初始化为5
。
row4NoX
是初始化为所有----
的行,但由于它从未打印出来,我猜tiny_row
永远不会等于5
,而且for
循环看起来一定很有趣。
(我永远不会习惯C中的1初始化循环,但是当我看到一个用于<
测试的循环时,我认为它是一个错误。这可能不是世界上最准确的启发式方法,但到目前为止,它对我来说效果很好。:)
小小的说教建议:不要将变量名和索引与不同的编号方案混为一谈。坚持使用0-索引或1-索引(如果你从FORTRAN代码:转移过来的话),当你试图混合它们时,你通常会在编写可靠的软件时遇到更多的心理障碍。
https://stackoverflow.com/questions/5209231
复制相似问题