如何使用C语言编写仅打印国际象棋棋盘黑格位置的程序
原代码问题梳理
- 数组类型定义错误:
char a[100][100]是单字符二维数组,无法存储A8这类两位字符串,应该改为字符指针数组char *a[8][8]存储每个位置的字符串内容 - 初始化内容错误:空白位需要存
-而不是空格,第二行的F8属于笔误,正确应为F7 - 输出格式缺失:没有输出每行开头的固定前缀
-|,打印时使用%c只能输出单个字符,应该改为%s输出字符串 - 输出逻辑不符合样例:样例每行有8个输出项,原代码的打印逻辑没有对齐需求
修正后的硬编码实现代码
#include <stdio.h> int main() { int n = 8; int i,j; char *a[8][8] = { {"A8","-","C8","-","E8","-","G8","-"}, {"-","B7","-","D7","-","F7","-","H7"}, {"A6","-","C6","-","E6","-","G6","-"}, {"-","B5","-","D5","-","F5","-","H5"}, {"A4","-","C4","-","E4","-","G4","-"}, {"-","B3","-","D3","-","F3","-","H3"}, {"A2","-","C2","-","E2","-","G2","-"}, {"-","B1","-","D1","-","F1","-","H1"}, }; for(i = 0;i < n;i++){ printf("-| "); for(j = 0;j < n;j++){ printf("%s ",a[i][j]); } printf("\n"); } return 0; }
更简洁的动态生成版本(无需硬编码所有位置)
利用国际象棋黑格的规则:行号(8到1)+ 列序号(A对应1,B对应2……H对应8)之和为偶数的位置就是黑格,直接动态生成输出内容,避免硬编码笔误:
#include <stdio.h> int main() { for (int row = 8; row >= 1; row--) { printf("-| "); for (int col = 'A'; col <= 'H'; col++) { if ((row + (col - 'A' + 1)) % 2 == 0) { printf("%c%d ", col, row); } else { printf("- "); } } printf("\n"); } return 0; }
以上两个版本的输出都完全匹配你给出的样例要求。
内容的提问来源于stack exchange,提问作者itmemilan
相关产品推荐
相关产品推荐

