【发布时间】:2023-02-02 10:20:24
【问题描述】:
为什么在二进制数组的长度为 8(即 8 位)时返回 7 位而不是 8 位?
#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
int number = get_int("Number: ");
char binary[8]; // 8 bits in a byte
for (int i = 0; number != 0 ; i++)
{
if (number % 2 == 0)
{
binary[i] = '0';
}
else
{
binary[i] = '1';
}
number /= 2;
}
printf("%s\n", binary);
}
我越来越
数量:72
二进制:0001001
我知道它与这个小数的正确答案相反,只是想先更正缺失的数字。
【问题讨论】:
-
前导零是不是“缺失数字”(顺便说一句,二进制“位”代表“二进制数字”),因为它不会更改值。如果你想要一个固定的 8 位权重,那么你应该运行你的循环进行固定的 8 次迭代,而不是直到数字不为零。
-
您还需要以 null 终止您的字符串。一种方式是
char binary[9] = {0};。 (9 字节给你 8,加上空终止符 1。) -
在使用
%sprintf 格式说明符打印之前,需要将空终止符附加到binary字符串。char binary[9];足以容纳 8 位数字和一个空终止符。