#c #binary
#c #двоичный
Вопрос:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char c1,c2,c3,c4,c5;
int x;
scanf(" %c %c %c %c %c",amp;c1,amp;c2,amp;c3,amp;c4,amp;c5);
if (c1,c2,c3,c4,c5 !='0' amp;amp; c1,c2,c3,c4,c5 !='1'){
printf("Not a binary number!");
}
if (c1=='0' amp;amp; c2,c3,c4,c5=='0' || c2,c3,c4,c5 =='1'){
c5 = c5-48;
c4 = (c4-48)*2;
c3 = (c3-48)*4;
c2 = (c2-48)*8;
c1 = c1-48;
x = c5 c4 c3 c2 c1;
printf("%d",x);
}
return 0;
}
Таким образом, код работает для всех чисел, за исключением случаев, когда в качестве последнего символа (c5) вводится 0 (ноль). Когда это происходит, я получаю «Не двоичное число!». В чем моя ошибка? 🙂
Я только начинаю изучать C и программирование, так что будьте добры ко мне, хехех
Комментарии:
1.
if (c1,c2,c3,c4,c5 !='0' amp;amp; c1,c2,c3,c4,c5 !='1'){
не употребляйте наркотики.2. Условие вашего первого
if
оператора оценивается какc5 != '1'
, а все остальное игнорируется. Я предлагаю включить все предупреждения в вашем компиляторе, внимательно прочитать их, исправить и вернуться, если у вас все еще есть вопросы.3. Примечание: лучше использовать
c3 - '0'
etc вместоc3 - 48
. Гораздо понятнее, что такое преобразование.
Ответ №1:
во-первых, вы не можете принимать двоичные цифры сразу, у вас есть c1 — c5, что, если пользователь введет двоичный код для 100, это не сработает. поэтому попробуйте что-то вроде этого. Попробуйте это:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int val, base = 1,cn, decinum = 0,rest;
int alert = 0;
printf("Please enter a binary number 0's and 1's: ");
scanf("%d",amp;val);
cn = val; // saving it for printf
while(val > 0){
rest = val % 10;
if(rest == 0 || rest == 1) {
decinum = rest * base;
val /= 10;
base *= 2;
}else{
alert = 1;
break;
}
}
if(alert){
printf("Sorry not a binary numbern");
}else{
printf("binary: %d ist %d",cn,decinum);
}
return 0;
}
Пожалуйста, введите двоичное число 0 и 1:
01120100вывод: Извините, не двоичное число
Пожалуйста, введите двоичное число 0 и 1: 101
Вывод: двоичный код: 101 ist 5
Судя по комментариям cpatricio и Jonathan, вы имеете в виду большое число для двоичного кода, например 8 бит, и максимум 20 бит
int main()
{
unsigned long val,cn, decinum = 0;
int rest, base = 1;
int alert = 0;
printf("Please enter a binary number 0's and 1's: ");
scanf("%lu",amp;val);
cn = val; // save it for printf otherwise after the while loop is val = 0
while(val > 0){
rest = val % 10;
if(rest == 0 || rest == 1) {
decinum = rest * base;
val /= 10;
base *= 2;
}else{
alert = 1;
break;
}
}
if(alert){
printf("Sorry not a binary numbern");
}else{
printf("binary: %lu ist %ld",cn,decinum);
}
return 0;
}
проверка
Вывод:
Пожалуйста, введите двоичное число 0 и 1: 010101100001001011000
двоичный файл: 010101100001001011000 ist 705112Вывод: Пожалуйста, введите двоичное число 0 и 1: 0000001001011000 двоичное число: 0000001001011000 ist 600
Комментарии:
1. Если я введу 24-разрядное двоичное число,
scanf()
произойдет сбой.2. int — 10 бит, беззнаковый int — 10 бит, беззнаковый длинный int — 19 бит
3. @cpatricio вы были правы, я обновил свой ответ сейчас. и с unsigned long он может обрабатывать 21 и так далее биты
4. Максимальное значение long int равно 9,223,372,036,854,775,807 (19 чисел), максимальное значение long int без знака равно 18,446,744,073,709,551,615 (20 чисел), как вы можете обрабатывать 21 бит? (я не могу изменить свой последний комментарий, но должно быть 19 бит для long int и 20 бит для unsigned long int)
5. @cpatricio я понял вас, вы правы, я обновляю свои комментарии, спасибо, но с массивами можно справиться с большим количеством, как я уже говорил ранее