Перевод из 10 в 16 систему счисления (ошибка в коде) - C (СИ)
Формулировка задачи:
Здравствуйте!
Нужно перевести вводимое число из 10-ой в 16-ую систему исчисления, используя алгоритм вычисления остатков от деления. Программа компилируется, но выдает не верный результат, все время нули. Пожалуйста, помогите найти ошибку.
#include <stdio.h>
#include <conio.h>
main()
{
clrscr();
const int n=8;
int a[n], b, i;
printf("vvedit:");
scanf("%d", &b);
for (i=n; i>0; i--)
{
a[i] = b%16;
b=b/16;
switch(a[i])
{
case 0:printf("0");continue;
case 1:printf("1");continue;
case 2:printf("2");continue;
case 3:printf("3");continue;
case 4:printf("4");continue;
case 5:printf("5");continue;
case 6:printf("6");continue;
case 7:printf("7");continue;
case 8:printf("8");continue;
case 9:printf("9");continue;
case 10:printf("A");continue;
case 11:printf("B");continue;
case 12:printf("C");continue;
case 13:printf("D");continue;
case 14:printf("E");continue;
case 15:printf("F");continue;
}
}
getch();
}Решение задачи: «Перевод из 10 в 16 систему счисления (ошибка в коде)»
textual
Листинг программы
#include <stdio.h>
main()
{
const int n=8;
char a[n+1];
a[n]=0;
int b, i;
printf("vvedit:");
scanf("%d", &b);
for (i=n-1; i>=0; i--, b/=16)
a[i] = (b%16 < 10) ? b%16+'0' : b%16 - 10 + 'A';
printf ("%s\n", a);
}
Объяснение кода листинга программы
- Подключение заголовочного файла стандартного ввода/вывода (stdio.h).
- Объявление функции main().
- Объявление константы n со значением 8.
- Объявление массива a типа char с размером n+1.
- Установка значения a[n] равным 0.
- Объявление переменной b типа int и переменной i типа int.
- Вывод сообщения
vvedit:и запрос ввода значения переменной b с помощью функции scanf(). - Начинается цикл for, который начинается с i=n-1 и выполняется до i>=0, уменьшаясь на 1 при каждой итерации и разделяя b на 16.
- Внутри цикла присваивается значение a[i] равным (b%16 < 10) ? b%16+'0' : b%16 - 10 + 'A'.
- Вывод строки, представляющей собой массив a, с помощью функции printf().
- Конец функции main().