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

C语言开发控制台井字棋(Tic Tac Toe)时棋盘打印出现排版错位问题

问题根因

  1. 全局字符数组trisBoard默认初始值为\0(空终止符),空终止符在控制台打印时不占用字符宽度,落子后写入的x会占用1个字符宽度,直接导致该行整体偏移1位。
  2. 原有drawBoard函数的分隔行、内容行格式不统一,第一行分隔符末尾额外多了6个空格,也会加剧排版错位。

修复步骤

  • 在游戏启动初始化阶段,将棋盘所有单元格填充为空格字符' ',保证无论是否落子,每个单元格打印时都固定占用1个字符宽度。
  • 统一drawBoard函数内所有行的输出格式,保证每一行的宽度完全一致。

修复后完整代码

#include <stdio.h>

void drawBoard();
void start();
void playerMove();
void computerMove();


char trisBoard[3][3];
short computerPoint;
short playerPoint;
short playerRow;
short playerColumn;


int main() {
    start();
    return 0;
}

void drawBoard() 
{
   printf("\n");
   printf("   Tris Game\n");
   printf("\n");
   printf(" %c | %c | %c \n", trisBoard[0][0], trisBoard[0][1], trisBoard[0][2]);
   printf("---|---|---\n");
   printf(" %c | %c | %c \n", trisBoard[1][0], trisBoard[1][1], trisBoard[1][2]);
   printf("---|---|---\n");
   printf(" %c | %c | %c \n", trisBoard[2][0], trisBoard[2][1], trisBoard[2][2]);
   printf("\n");
}

void start() 
{
    // 初始化棋盘所有格子为空格
    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 3; j++) {
            trisBoard[i][j] = ' ';
        }
    }
    for(int x = 0; x < 9; x++) {
        drawBoard();
        playerMove();
    }   
}

void playerMove() 
{
    printf("It's your turn, where do you wanna insert the X ? \n");

    printf("Insert the row (first number is 0) \n");
    scanf("%hd", &playerRow);

    printf("Insert a column (first number is 0) \n");
    scanf("%hd", &playerColumn);

    // 可选:新增落子合法性校验,避免下标越界和重复落子
    if(playerRow < 0 || playerRow >= 3 || playerColumn <0 || playerColumn >=3) {
        printf("输入不合法,行和列只能是0-2范围内的数字,请重试\n");
        return;
    }
    if(trisBoard[playerRow][playerColumn] != ' ') {
        printf("该位置已有棋子,请重新选择\n");
        return;
    }

    trisBoard[playerRow][playerColumn] = 'x';
}

可选优化说明

原有代码的scanf读取short类型变量时,用%d格式符会存在类型不匹配问题,修复为%hd更规范;新增的落子合法性校验可以避免数组下标越界、重复落子的问题。


内容的提问来源于stack exchange,提问作者leo___

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:36:04