gpt4 book ai didi

c - 将八进制转换为二进制的程序

转载 作者:行者123 更新时间:2023-11-30 16:13:31 26 4
gpt4 key购买 nike

我是 C 编程语言的初学者,这几天我正在训练做一些 C 练习我陷入了一些转换练习:这就是我所做的

#include <stdio.h>

#include <string.h>

int main() {

int num[8] = {
0,
1,
2,
3,
4,
5,
6,
7
};
long long binary, octal, tempoctal;
int last, i, A, tempi;
char hex[9] = {
'000',
'001',
'010',
'011',
'100',
'101',
'110',
'111'
};
int bex[10];
A = 0;

printf("enter an octal number: ");
scanf("%lld", & octal);

tempoctal = octal;

while (tempoctal != 0) {
last = tempoctal % 10;

for (i = 0; i < 8; i++) {
if (num[i] == last) {
tempi = i;
bex[A] = tempi;

}
}

A++;
tempoctal /= 10;
}

printf("\nthe is %s", bex);

return 0;
}

所以我只想知道为什么当我想打印 bex 数组时我在控制台上收到错误 enter image description here 。虽然我知道解决方案,但我想用我自己的方式来做。

最佳答案

回答你的问题。 bex 被声明为 int bex[10],整数数组。 printf("%s"... 需要一个字符串,而不是一个 int 数组。

  • 字符串通常是一个字符数组char bex[10]。 Char 是一个字节,而 int 通常是 4 字节长。所以,你看到了其中的区别。在您的示例中,您修改了“int”的最低字节,将其他 3 个字节保留为“0”。

  • 可打印的字符有相应的代码。例如,字符“0”在 asccii 编码中的代码为 48。所有其他表示数字的字符都有连续的代码 (48..57)。这就是 printf 和其他服务在看到字节中的 48 时知道要打印的内容。

  • “c”中的字符串以杂散的0 结尾,以便printf 知道在哪里停止读取字符。

因此,如果您想将“bex”打印为字符串,则需要将其创建为字符串。例如

char bex[10];

for (i=0; i <8; i++)
bex[A++] = '0' + i; // code of '0' + a number
bex[A] = 0; // string terminator

只需确保您的“A”始终小于“8”,以避免数组溢出(字符串长度为 9 加上一个终止符。现在您可以执行此操作。

 printf("%s", bex);

您必须处理程序的其余部分,因为它在当前状态下没有做任何有用的事情,但这应该可以帮助您开始。

关于c - 将八进制转换为二进制的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58035891/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com