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

C语言:将输入的0/1转换为X/O并存入数组的代码问题求助

问题分析与修复方案

代码中的核心错误

  • 字符比较逻辑错误:输入的是字符串,每个字符是ASCII码的'0'(值为48)和'1'(值为49),你直接用str[i]==0和str[i]==1比较整数,永远匹配不上目标字符。
  • else语法与代码块错误:else(str[i]==1);是无效语法,else不能附带条件;同时循环内的代码未用{}包裹,导致不管if条件是否成立,board[i]='X';都会被执行,逻辑完全混乱。
  • 字符串终止符缺失:转换后的board数组没有添加字符串结束符'\0',strlen(board)会读取内存中随机内容,导致长度计算错误。
  • 变量类型与输出错误:boardstr定义为char类型,但strlen返回int类型值,赋值会截断数据;最后用printf("%c",boardstr)输出字符形式的长度,而非你需要的转换后字符串。

修正后的代码

#include <stdio.h>
#define BUFFER 100
#include <string.h>

int main() {
    
    char str[BUFFER], board[BUFFER];
    int size, i;
    
    printf("Input numbers 1 and 0: ");
    scanf("%s", str);
    size = strlen(str);
    
    for(i = 0; i < size; i++) {
        if(str[i] == '0') {
            board[i] = 'O';
        } else if(str[i] == '1') {
            board[i] = 'X';
        } else {
            // 可选:处理非0/1的非法输入
            board[i] = '?';
        }
    }
    board[size] = '\0'; // 添加字符串终止符,确保是合法C字符串
    
    printf("%s\n", board); // 直接输出转换后的完整字符串
    
    return 0;
}

关键修正说明

  1. 把字符比较改为str[i] == '0'和str[i] == '1',匹配输入的字符类型。
  2. 用{}包裹循环内的代码块,保证条件分支的逻辑正确执行;如果确定输入只有0和1,也可以直接用else代替else if。
  3. 在board数组的末尾添加'\0',避免后续字符串操作出现未定义行为。
  4. 修正输出逻辑,直接用printf("%s", board)输出转换后的字符串,移除多余的boardstr变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:05:30