Как ввести двоично-десятичный код числа в массив - C (СИ)
Формулировка задачи:
Добрый день.Возник следующий вопрос: мне нужно ввести с клавиатуры двоично-десятичный код числа, как введенное число занести в массив так,чтобы например,если пользователь ввел 01000001 ,то 0100- был нулевым элементом, 0001-был первым элементом массива?Спасибо
Массив должен быть символьным и ввод без пробелом
Решение задачи: «Как ввести двоично-десятичный код числа в массив»
textual
Листинг программы
char p;
char pp[2*20]="";
int h=0,u=0; /*h буду использовать как счётчик бит в тетрадах, а u как индекс массива pp*/
do
{
p=getchar();
if(p='\n')
break; /*условие выхода из цикла, фактически я переделал do while в цикл while*/
if( (p<'0') || (p>'1') )
continue; /*break прервёт цикл ввода, а continue
перейдёт к проверке условия цикла, т.е. код ниже выполнятся не будет - игнорируем "левый" символ*/
if(p=='1')
pp[u] |= 1;
pp[u] <<= 1; /*а '0' вводить?*/
h++; /*бит в элемент массива ввели*/
if(h>3)
{
h=0;/*отсчитали 4 бита, которые уже ввели и теперь счётчик обнулили для следующей тетрады*/
u++; /*Перешли к следующему элементу массива*/
}
putchar(p); /*зачем это непонятно*/
}while(1);
Объяснение кода листинга программы
В этом коде:
- Объявлены две переменные:
pиpp.pявляется символом, который считывается из стандартного ввода.pp- это массив символов, используемый для хранения двоичного представления вводимого числа.
- Инициализированы две переменные:
hиu.hиспользуется как счетчик битов в тетрадах (группах из четырех битов).uиспользуется как индекс массиваpp.
- В цикле
do-whileсчитывается символ из стандартного ввода. Если этот символ является символом новой строки (\n), то цикл прерывается. - Если считанный символ не является цифрой от '0' до '1', то он игнорируется с помощью оператора
continue. - Если считанный символ является '1', то соответствующий бит в текущем элементе массива
ppустанавливается в 1. - Значение элемента массива
ppсдвигается вправо на 1 бит. - Увеличивается счетчик
hна 1, указывая, что бит был введен. - Если
hбольше 3, это означает, что введена четверка битов, поэтому счетчикhсбрасывается до 0, а счетчикuувеличивается на 1, переходя к следующему элементу массива. - Считанный символ выводится на стандартный вывод с помощью
putchar(). Возможно, это сделано для проверки введенных данных. - Цикл продолжается до тех пор, пока символ не будет считан (т.е. пока
doусловие истинно).