C语言实现字符串字符、ASCII码、8位二进制编码输出的作业调试
原代码核心问题排查
- 输入适配缺陷:使用
scanf("%s", string)读取字符串,遇到空格即截断,无法支持"every sentence"这类带空格的测试输入 - 格式输出缺失:未按照要求做前导零补位,无法输出3位定长ASCII值、8位定长二进制编码
- 二进制逻辑错误:采用逐次取余、除2的方式计算二进制输出,生成的位序列是低位在前,且未做8位长度强制补零,和要求的正向定长二进制格式完全不符;转换过程中直接修改原字符串存储的字符值,会永久破坏输入内容
- 冗余无关逻辑:自行添加的按10字符分组、打印SO/S/T标记的逻辑,和作业要求的
[字符 三位ASCII: 8位二进制]输出规范无关联,属于偏离需求的冗余代码;要求用户手动输入字符串长度n,多余的交互步骤反而容易造成输入错位 - 内存与规范风险:字符串数组仅分配20字节长度,配合手动输入字符数n的逻辑,极易触发数组越界;采用非标准的
void main()写法,不符合C语言标准语法
符合作业要求的修正实现
#include <stdio.h> int main(void) { char string[100]; int count = 0; // 读取整行带空格的字符串,避免scanf截断空格 printf("请输入目标字符串:\n"); fgets(string, sizeof(string), stdin); // 逐字符遍历处理 while (string[count] != '\0' && string[count] != '\n') { // 输出格式严格匹配要求:字符 三位补零ASCII值: 8位补零二进制 printf("%c ", string[count]); // 打印3位补零的ASCII十进制值 printf("%03d: ", string[count]); // 从最高位到最低位逐位计算,固定输出8位二进制 for (int bit_idx = 7; bit_idx >= 0; bit_idx--) { printf("%d", (string[count] >> bit_idx) & 1); } printf("\n"); count++; } return 0; }
运行验证说明
- 输入字符
C(ASCII值67)时,程序输出固定为C 067: 01000011,完全匹配格式要求 - 输入"every sentence"这类带空格的字符串时,可完整读取所有字符,空格字符也会按照其ASCII值(32)对应输出为
032: 00100000 - 所有输出固定满足补位规则,不会出现二进制位数不足、ASCII值缺前导零的问题
内容的提问来源于stack exchange,提问作者Harman Jit
相关产品推荐
相关产品推荐

