繁体   English   中英

八进制转二进制的程序

[英]Program to convert octal to binary number system

我是 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 数组时,我在控制台上出现错误,请在此处输入图像描述 虽然我知道解决方案,但我想以我自己的方式去做。

回答你的问题。 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);

您必须在程序的 rest 上工作,因为它在当前的 state 中没有任何用处,但这应该可以帮助您开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM