Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将八进制转换成二进制的程序_C - Fatal编程技术网

C 将八进制转换成二进制的程序

C 将八进制转换成二进制的程序,c,C,我是c编程语言的初学者,在这几天里,我正在训练做一些c练习 我被一些转换练习绊倒了: 这就是我所做的 #include <stdio.h> #include <string.h> int main() { int num[8] = { 0, 1, 2, 3, 4, 5, 6, 7 }; long long binar

我是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;
}

#包括
#包括
int main(){
整数[8]={
0,
1.
2.
3.
4.
5.
6.
7.
};
长二进制、八进制、八进制;
int last,i,A,tempi;
字符十六进制[9]={
'000',
'001',
'010',
'011',
'100',
'101',
'110',
'111'
};
int-bex[10];
A=0;
printf(“输入八进制数:”);
scanf(“%lld”&八进制);
温度八进制=八进制;
while(tempoctal!=0){
最后=温度八进制%10;
对于(i=0;i<8;i++){
如果(num[i]==最后一次){
tempi=i;
bex[A]=温度;
}
}
A++;
tempoctal/=10;
}
printf(“\n是%s”,bex);
返回0;
}
所以我想知道为什么我要打印bex的数组 我在控制台上出错了。
虽然我知道解决办法,但我想用我自己的方式去做

回答你的问题
bex
声明为
int-bex[10]
,整数数组
printf(“%s”…
需要字符串,而不是int数组

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

  • 可打印字符有相应的代码。例如,在asccii编码中,“0”字符的代码为
    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

您必须处理程序的其余部分,因为它在当前状态下没有任何有用的功能,但这应该有助于您继续操作。

我在控制台上遇到错误不是问题描述。您遇到了什么错误?它就在您面前的控制台上,但我们从这里看不到您的屏幕。您的帖子应该包括一个清晰的pro错误描述,包括您看到的确切错误消息,并询问与您发布的代码相关的特定问题。请参阅和。存储
scanf(“%lld”、&octal)后
,内存中的位是相同的,无论你想以二进制、八进制、十进制还是十六进制查看它——这些位都不会改变。为什么不简单地按位迭代
八进制并输出位呢?是什么让你认为你可以将
bex
打印为字符串?
printf(\n是%s),bex;
当你有
int-bex[10];
?您正在使用与给定参数不匹配的
printf
转换说明符调用未定义的行为。请参阅和。您还将受益于这里的答案代码应该是不可编译的,因为您使用了带有三个字符的字符文本。您没有从t获得编译错误吗帽子?你知道你有一个
%o
八进制说明符来读取基数为8的数字吗?你为什么要读取基数为10的数字???
 printf("%s", bex);