Программа для преобразования восьмеричной в двоичную систему счисления - PullRequest
0 голосов
/ 21 сентября 2019

Я новичок в языке программирования 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, я получаю ошибку на консоли введите описание изображения здесь .Хотя я знаю решение, но я хочу сделать это по-своему.

1 Ответ

0 голосов
/ 21 сентября 2019

Отвечая на ваш вопрос.bex объявлен как int bex[10], массив целых чисел.printf("%s"... ожидает символьную строку, а не массив int.

  • Символьная строка обычно представляет собой массив символов char bex[10].Char - это один байт, а int обычно имеет длину 4 байта.Итак, вы видите разницу там.В вашем примере вы модифицируете младший байт 'int', оставляя 3 в качестве '0'.

  • печатные символы имеют соответствующие коды.Например, символ '0' имеет код 48 в кодировке asccii.Все другие символы, представляющие числа, имеют последовательные коды (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);

Вы должны работать с остальной частью программы, потому что она не делает ничего полезного в текущем состоянии, но это должно помочь вам начать работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...