我正在尝试制作一个显示棋盘/棋盘的代码。我给棋盘上的每个方格都给了一个数字,所以我可以手动选择这些棋子的位置作为未来编程的目的。这就是我得到的:
#include <stdio.h>
//{",",",",",",","},
void main()
{
int board[8][8] = {
{'1','2','3','4','5','6','7','8'},
{'9','10','11','12','13','14','15','16'},
{'17','18','19','20','21','22','23','24'},
{'25','26','27','28','29','30','31','32'},
{'33','34','35','36','37','38','39','40'},
{'41','42','43','44','45','46','47','48'},
{'49','50','51','52','53','54','55','56'},
{'57','58','59','60','61','62','63','64'}
};
/* Display the checkerboard */
printf("\n\n");
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[0][0], board[0][1], board[0][2], board[0][3], board[0][4], board[0][5], board[0][6], board[0][7]);
printf("---+---+---+---+---+---+---+---\n");
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[1][0], board[1][1], board[1][2], board[1][3], board[1][4], board[1][5], board[1][6], board[1][7]);
printf("---+---+---+---+---+---+---+---\n");
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[2][0], board[2][1], board[2][2], board[2][3], board[2][4], board[2][5], board[2][6], board[2][7]);
printf("---+---+---+---+---+---+---+---\n");
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[3][0], board[3][1], board[3][2], board[3][3], board[3][4], board[3][5], board[3][6], board[3][7]);
printf("---+---+---+---+---+---+---+---\n");
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[4][0], board[4][1], board[4][2], board[4][3], board[4][4], board[4][5], board[4][6], board[4][7]);
printf("---+---+---+---+---+---+---+---\n");
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[5][0], board[5][1], board[5][2], board[5][3], board[5][4], board[5][5], board[5][6], board[5][7]);
printf("---+---+---+---+---+---+---+---\n");
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[6][0], board[6][1], board[6][2], board[6][3], board[6][4], board[6][5], board[6][6], board[6][7]);
printf("---+---+---+---+---+---+---+---\n");
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[7][0], board[7][1], board[7][2], board[7][3], board[7][4], board[7][5], board[7][6], board[7][7]);
}
这是输出:
1 | 2 | 3| 4 | 5 | 6 | 7 | 8
---+---+---+---+---+---+---+---
9 | 0 | 1| 2 | 3 | 4 | 5 | 6
---+---+---+---+---+---+---+---
7 | 8 | 9| 0 | 1 | 2 | 3 | 4
---+---+---+---+---+---+---+---
5 | 6 | 7| 8 | 9 | 0 | 1 | 2
---+---+---+---+---+---+---+---
3 | 4 | 5| 6 | 7 | 8 | 9 | 0
---+---+---+---+---+---+---+---
1 | 2 | 3| 4 | 5 | 6 | 7 | 8
---+---+---+---+---+---+---+---
9 | 0 | 1| 2 | 3 | 4 | 5 | 6
---+---+---+---+---+---+---+---
7 | 8 | 9| 0 | 1 | 2 | 3 | 4
有警告:
main.c:13:37: warning: multi-character character constant[-Wmultichar]
{'57','58','59','60','61','62','63','64'}
看起来人物不能打印高于9?我想要的是棋盘的简单预览(带有2d数组)。我试图改变这段代码中的一些部分,但没有任何运气......有什么想法吗?
答案 0 :(得分:3)
您不能将字符串放在单引号字符中。必须是唯一的角色。 但是对字符串中的连续整数列表进行硬编码没有意义,所以:
带有公式的简单双循环更加紧凑,可以节省大量的复制/粘贴:
#include <stdio.h>
void main()
{
int i,j;
/* Display the checkerboard */
printf("\n\n");
for (i=0;i<8;i++)
{
for (j=0;j<8;j++)
{
printf("%3d ",i*8+(j+1));
}
printf("\n---+---+---+---+---+---+---+---\n");
}
}
结果:
1 2 3 4 5 6 7 8
---+---+---+---+---+---+---+---
9 10 11 12 13 14 15 16
---+---+---+---+---+---+---+---
17 18 19 20 21 22 23 24
---+---+---+---+---+---+---+---
25 26 27 28 29 30 31 32
---+---+---+---+---+---+---+---
33 34 35 36 37 38 39 40
---+---+---+---+---+---+---+---
41 42 43 44 45 46 47 48
---+---+---+---+---+---+---+---
49 50 51 52 53 54 55 56
---+---+---+---+---+---+---+---
57 58 59 60 61 62 63 64
---+---+---+---+---+---+---+---
增强版本,更好的框架(只是为了好玩)
#include <stdio.h>
void main()
{
int i,j;
/* Display the checkerboard */
printf("\n\n\n|---+---+---+---+---+---+---+---+\n");
for (i=0;i<8;i++)
{
printf("|");
for (j=0;j<8;j++)
{
printf("%2d |",i*8+(j+1));
}
printf("\n|---+---+---+---+---+---+---+---+\n");
}
}
结果
|---+---+---+---+---+---+---+---+
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---+---+---+---+---+---+---+---+
| 9 |10 |11 |12 |13 |14 |15 |16 |
|---+---+---+---+---+---+---+---+
|17 |18 |19 |20 |21 |22 |23 |24 |
|---+---+---+---+---+---+---+---+
|25 |26 |27 |28 |29 |30 |31 |32 |
|---+---+---+---+---+---+---+---+
|33 |34 |35 |36 |37 |38 |39 |40 |
|---+---+---+---+---+---+---+---+
|41 |42 |43 |44 |45 |46 |47 |48 |
|---+---+---+---+---+---+---+---+
|49 |50 |51 |52 |53 |54 |55 |56 |
|---+---+---+---+---+---+---+---+
|57 |58 |59 |60 |61 |62 |63 |64 |
|---+---+---+---+---+---+---+---+
仍然不是ASCII艺术掌握,但更好:)
答案 1 :(得分:1)
替换您的电路板定义'xx'
=&gt; xx
:
int board[8][8] = {
{1,2,3,4,5,6,7,8},
....
{57,58,59,60,61,62,63,64}
};
更改printf
格式(%c
=&gt; %2d
)
printf(" %2d | %2d | %2d | %2d | %2d | %2d | %2d | %2d \n", board[1][0], board[1][1], board[1][2], board[1][3], board[1][4], board[1][5], board[1][6], board[1][7]);
....
注意:
编写int foo = '0';
时,要求编译器将变量foo
中的字符'0'的值存储起来。
字符'0'
的值与0
不同。
当您编写int foo = '10';
时,您的编译器会告诉您它不明白您的意思,因为如果'0'
和'1'
是字符,'10'
表示什么都没有。
%c
和%d
在printf
中有所不同:
printf("%c", foo);
会要求打印代码为foo
的字符
printf("%d", foo);
会要求打印foo
printf("%c", 'a');
会要求打印字符a
printf("%d", 'a');
会要求打印字符a