我是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数组时
我在consol enter image description here上遇到错误。
虽然我知道解决方案,但我想以自己的方式做到这一点。
最佳答案
回答你的问题。 bex
声明为int bex[10]
,整数数组。 printf("%s"...
需要一个字符串,而不是int数组。
字符串通常是chars 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/