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
相关产品推荐
相关产品推荐

