我正在编写一个程序,允许用户玩游戏四个与计算机连接。我在打印正确的尺寸时遇到了困难。我尝试使用嵌套进行循环,但输出有点关闭。这是我的代码的一部分:
#include <stdio.h>
#define BOARD_SIZE_VERT 6
#define BOARD_SIZE_HORIZ 7
void display_board(int board[] [BOARD_SIZE_VERT]);
int main ()
{
int board[BOARD_SIZE_HORIZ][BOARD_SIZE_VERT] = {{0}};
display_board(board);
return 0;
}
void display_board(int board[] [BOARD_SIZE_VERT])
{
int i,j;
for (i=0; i<BOARD_SIZE_HORIZ; i++) {
printf ("+---+---+---+---+---+---+---+");
printf ("n");
for (j=0; j<BOARD_SIZE_VERT; j++)
printf ("| ");
printf("n");
}
}
这是我的输出:
+---+---+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+---+---+
| | | | | |
这就是我想要的样子:
+---+---+---+---+---+---+---+
| | | | | | | |
+---+---+---+---+---+---+---+
| | | | | | | |
+---+---+---+---+---+---+---+
| | | | | | | |
+---+---+---+---+---+---+---+
| | | | | | | |
+---+---+---+---+---+---+---+
| | | | | | | |
+---+---+---+---+---+---+---+
| | | | | | | |
+---+---+---+---+---+---+---+
void display_board(int board[] [BOARD_SIZE_VERT]){
int i,j;
for (i=0; i<BOARD_SIZE_VERT; i++) {
printf ("+");
for (j=0; j<BOARD_SIZE_HORIZ; j++)
printf("---+");
printf ("n");
printf ("|");
for (j=0; j<BOARD_SIZE_HORIZ; j++)
printf(" |");
printf ("n");
}
printf ("+");
for (j=0; j<BOARD_SIZE_HORIZ; j++)
printf("---+");
printf ("n");
}
两个主要问题:您的循环是倒置的,您需要打印一些额外的字符才能在底部和右侧获取额外的线条。尝试以下操作:
void display_board(int board[] [BOARD_SIZE_HORIZ])
{
int row,col;
for (row=0; row<BOARD_SIZE_VERT; row++) {
printf ("+---+---+---+---+---+---+---+");
printf ("n");
for (col=0; col<BOARD_SIZE_HORIZ; col++) {
printf ("| ");
}
printf("|n");
}
printf ("+---+---+---+---+---+---+---+");
}
这是相关更改:
- 我交换了循环中Vert/Horiz常数的用法。由于您一次打印一条线,因此外圈控制板的高度。内部循环控制板上的列数
- 将
i
和j
重命名为row
和col
,因此代码更自我记录 - 在
printf("n")
上添加了一个管道,因为您需要的垂直分离器线比每条线的实际插槽数 - 最后添加了一个额外的
printf("+---....
,因为您需要比实际行数更多的水平分离器
另外,我更改了函数原型中的数组定义,以便第一个索引是行,第二个索引是列。如果您选择遵循此操作,则需要更改代码中数组的其他用法。例如:
int board[BOARD_SIZE_VERT][BOARD_SIZE_HORIZ] = {{0}};
您的代码效果很好。但是您有8个"| "
可以显示,并且仅循环B OARD_SIZE_VERT
值6。因此,您应该将其增加到8或添加到8。尝试以下操作:
void display_board(int board[] [BOARD_SIZE_VERT]){
int i,j;
for (i=0; i<BOARD_SIZE_HORIZ - 1; i++) {
printf ("+---+---+---+---+---+---+---+");
printf ("n");
for (j=0; j<BOARD_SIZE_VERT + 2; j++)
printf ("| ");
printf("n");
}
printf ("+---+---+---+---+---+---+---+n");
}