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; }
关键修正说明
- 把字符比较改为
str[i] == '0'和str[i] == '1',匹配输入的字符类型。 - 用
{}包裹循环内的代码块,保证条件分支的逻辑正确执行;如果确定输入只有0和1,也可以直接用else代替else if。 - 在
board数组的末尾添加'\0',避免后续字符串操作出现未定义行为。 - 修正输出逻辑,直接用
printf("%s", board)输出转换后的字符串,移除多余的boardstr变量。
内容的提问来源于stack exchange,提问作者Roxmate
相关产品推荐
相关产品推荐

