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

C语言二维字符数组实现3x3井字棋盘运行异常的修复方法

井字棋char版棋盘读取异常修复方案

异常根因

问题出在scanf不同格式符对空白字符的处理差异:

  • 用int类型存储时,%d会自动跳过输入流中所有空白字符(空格、换行、制表符等),因此原逻辑可以正常运行。
  • 换成char类型后使用的%c不会主动跳过任何空白字符,会把输入过程中产生的空格、回车符都当成普通字符存入二维数组,最终导致存储内容和预期的XO不匹配,棋盘显示错乱。

最小改动修复

只需要在读取字符的%c前加一个半角空格,把原读取语句:
scanf("%c", &board[i][j]);
改为:
scanf(" %c", &board[i][j]);
这个前置空格会指示scanf先跳过输入流中任意数量的空白字符,再读取下一个非空白的有效字符。修改后不管你是逐字符输入按回车确认,还是按行用空格分隔输入XO,都能正确采集棋盘内容,不会把多余的空白符存入数组。

修复后完整可运行代码

#include <stdio.h>
int main (void){
  char board[3][3];
  printf("Enter X or O>");
  for(int i=0; i<3; i++){
    for(int j=0; j<3; j++){
        scanf(" %c", &board[i][j]);
    }
  }
  printf("Board: \n");
  for(int i=0; i<3; i++){
    for(int j=0; j<3; j++){
        printf("%c ", board[i][j]);
    }
    printf("\n");
  }
}
/* 输入参考:
X O X 
O X O 
X O O 
*/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 21:15:04