You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:15:08