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

C语言十进制转二进制输出缺一位:8位数组为何仅返回7位?

十进制转8位二进制的位数缺失问题分析与修复

问题原因

  1. 循环执行次数不足:输入72的二进制是1001000,共7个有效位,你的循环仅在number != 0时执行,会迭代7次,只给binary[0]到binary[6]赋值,第8个元素binary[7]未被处理。
  2. 缺少字符串终止符:C语言中printf("%s")输出字符串时,需要以'\0'(空字符)作为结束标志。你没有手动添加这个终止符,当前能输出7位只是巧合——恰好binary[7]的内存值是'\0',如果内存值随机,会输出乱码直到遇到'\0'。
  3. 数组长度设计缺陷:要存储8位二进制字符串,数组长度至少需要9(8位字符+1位终止符),否则添加终止符时会出现数组越界。

修复方案

方案一:固定循环8次(推荐)

直接循环8次,确保填充满8位,同时初始化数组并预留终止符位置:

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    int number = get_int("Number: ");
    char binary[9] = {0}; // 8位二进制 + 1位'\0'终止符,初始化为0(即'\0')

    for (int i = 0; i < 8; i++)
    {
        binary[i] = (number % 2 == 0) ? '0' : '1';
        number /= 2;
    }
    printf("%s\n", binary);
}

方案二:补全剩余位并添加终止符

保留原循环逻辑,补全未填充的位为'0',并手动添加终止符:

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    int number = get_int("Number: ");
    char binary[9]; // 预留终止符位置
    int i;

    for (i = 0; number != 0 ; i++)
    {
        binary[i] = (number % 2 == 0) ? '0' : '1';
        number /= 2;
    }
    // 补全剩余位为'0'
    for (; i < 8; i++)
    {
        binary[i] = '0';
    }
    // 添加字符串终止符
    binary[8] = '\0';
    printf("%s\n", binary);
}

注:你提到结果顺序与正确答案相反,后续可以通过反转数组来修正——比如填充完后,交换binary[0]和binary[7]、binary[1]和binary[6],以此类推。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:40:42