Я пытаюсь отобразить двоичную строку из шестнадцатеричной строки. мой код:преобразование из шестнадцатеричного в двоичный
#include <stdio.h>
int main() {
char hexa[5], num[120];
int i = 0, j, k, t;
char ch;
printf("enetr hexadecimal");
while (ch = getchar() != '\n') {
scanf("%c", &ch);
hexa[i] = ch;
i++;
}
k = 0;
for (j = 0; hexa[j] != '\0'; j++) {
if (hexa[j] == 'A') {
num[k++] = '1';
num[k++] = '0';
num[k++] = '1';
num[k++] = '0';
} else if (hexa[j] == 'B') {
num[k++] = '1';
num[k++] = '0';
num[k++] = '1';
num[k++] = '1';
} else if (hexa[j] == 'C') {
num[k++] = '1';
num[k++] = '1';
num[k++] = '0';
num[k++] = '0';
} else if (hexa[j] == 'D') {
num[k++] = '1';
num[k++] = '1';
num[k++] = '0';
num[k++] = '1';
} else if (hexa[j] == 'E') {
num[k++] = '1';
num[k++] = '1';
num[k++] = '1';
num[k++] = '0';
} else if (hexa[j] == 'F') {
num[k++] = '1';
num[k++] = '1';
num[k++] = '1';
num[k++] = '1';
} else if (hexa[j] == '0') {
num[k++] = '0';
num[k++] = '0';
num[k++] = '0';
num[k++] = '0';
} else if (hexa[j] == '1') {
num[k++] = '0';
num[k++] = '0';
num[k++] = '0';
num[k++] = '1';
} else if (hexa[j] == '2') {
num[k++] = '0';
num[k++] = '0';
num[k++] = '1';
num[k++] = '0';
} else if (hexa[j] == '3') {
num[k++] = '0';
num[k++] = '0';
num[k++] = '1';
num[k++] = '1';
} else if (hexa[j] == '4') {
num[k++] = '0';
num[k++] = '1';
num[k++] = '0';
num[k++] = '0';
} else if (hexa[j] == '5') {
num[k++] = '0';
num[k++] = '1';
num[k++] = '0';
num[k++] = '1';
} else if (hexa[j] == '6') {
num[k++] = '0';
num[k++] = '1';
num[k++] = '1';
num[k++] = '0';
} else if (hexa[j] == '7') {
num[k++] = '0';
num[k++] = '1';
num[k++] = '1';
num[k++] = '1';
} else if (hexa[j] == '8') {
num[k++] = '1';
num[k++] = '0';
num[k++] = '0';
num[k++] = '0';
} else if (hexa[j] == '9') {
num[k++] = '1';
num[k++] = '0';
num[k++] = '0';
num[k++] = '1';
}
}
for (t = 0; num[t] != '\0'; t++)
printf("%c", num[t]);
return 0;
}
Этот фрагмент отображает только первый символ шестнадцатеричной строки, а не всю строку. пожалуйста, помогите в том, что вызывает ошибку, и помогите мне исправить то же самое.
У вас есть несколько проблем с представленным кодом. Чтобы начать с ввода данных цикла, у вас нет каких-либо пограничных проверок, вы не проверяете, что вход действителен, условие eloop - это не то, что вы ожидаете от него (читайте о [приоритете оператора] (http://en.cppreference.com/w/c/language/operator_precedence)), и вы читаете два символа ввода в каждой итерации цикла. Затем в следующем цикле найдите ограничитель строки в массиве 'hexa', но вы фактически не добавляете его в массив. –
И, наконец, с помощью ['fgets'] (http://en.cppreference.com/w/c/io/fgets) и [' strtol'] (http://en.cppreference.com/w/c/string/byte/strtol) вы можете легко обрезать код примерно до десяти строк или около того. –
Не используйте 'scanf' внутри' while', вам это не нужно, оно избыточно. Вы уже читали символ с консоли с помощью 'getchar()' ... –