#c
#c
Вопрос:
// После ввода значения «bin» я не получаю никаких выходных данных. Пожалуйста, помогите мне с этим.Я добавил «bin = bin / 10;» но проблема все еще не решена.
#include<stdio.h>
#include<math.h>
int main()
{
int ar[20],bin,i=0,sum=0,j,c;
printf("Enter a Binary numbern");
scanf("%d",amp;bin);
while(bin!=0||bin!=1)
{
c=bin%10;
ar[i]=c;
i ;
}
ar[i]=c;
for(j=0;j<=i;j )
{
sum=sum (ar[j]*pow(2,j));
}
printf("%d",sum);
return 0;
}
Обновление: цикл while теперь выглядит так:
while(bin!=0||bin!=1)
{
c=bin%10;
ar[i]=c;
bin=bin/10;
i ;
}
Комментарии:
1. Всем
ar
элементам будет присвоено то же значениеbin
, что и никогда не меняется.2. Ваш заголовок предполагает ввод типа
1001
и вывод:9
. Это то, что вы хотите? В этом случае ваша программа далека от этого.3. Я обновил КОД, пожалуйста, проверьте еще раз.
4. Скомпилируйте код, добавив символы, запустите его с помощью отладчика, построчно просматривайте код, проверяя значения всех соответствующих переменных, чтобы узнать, что происходит на самом деле.
5. Я скорректировал ваше последнее обновление, чтобы по-прежнему показывать исходный код, как если бы его больше не было, это сделало бы данные ответы / комментарии непонятными.
Ответ №1:
Эта строка
while(bin!=0||bin!=1)
вызовет бесконечный цикл как
bin!=0 || bin!=1
всегда будет оцениваться true
из-за использования ||
Словами: bin
всегда будет отличаться от 0 или отличаться от 1.
Пример:
Если
bin
равно 2, обе части будутtrue
Если
bin
равно 1, то первая часть будетtrue
, и вы получитеtrue
из-за or (||
)Если
bin
равно 0, то первая часть будетfalse
, а вторая будетtrue
, и вы получитеtrue
из-за or (||
)
Возможно, вы хотели, чтобы и , т. Е. amp;amp;
Вместо ||
Далее вы должны изменить значение bin
внутри цикла. Если вы этого не сделаете, это также вызовет бесконечный цикл.
Из вашего заголовка кажется, что вы хотите что-то совершенно иное, чем ваш текущий код. Может быть, что-то вроде:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char input[100];
int value = 0;
printf("Input a binary: ");
if (fgets(input, 100, stdin) == NULL) // Read a whole line of input
{
printf("errorn");
return 0;
}
char* t = input;
while (*t == '0' || *t == '1') // Repeat as long as input char is 0 or 1
{
value = value*2; // Multiply result by 2 as this is binary conversion
value = value *t - '0'; // Add value of current char, i.e. 0 or 1
t; // Move to the next char
}
printf("Decimal value: %dn", value);
return 0;
}
Комментарии:
1. @RohitVishwakarma — Тогда есть более 1 ошибки 😉
2. не могли бы вы скопировать мой код на свой компьютер и попытаться запустить.
3. введите 1000. вывод 8
Ответ №2:
[слишком долго для комментария]
Хорошо, снова:
Цикл while должен выполняться до тех пор, пока (bin!=0||bin!=1)
значение true .
Это означает, что он должен прерваться на противоположном:
!(bin!=0||bin!=1)
Применяя закон Де Моргана, мы находим, что приведенное выше эквивалентно:
(bin==0 amp;amp; bin==1)
Внимательно посмотрев на вышесказанное, мы видим, что для того, чтобы быть истинным, оно должно bin
быть равно 0 и 1 одновременно. Это невозможно. Таким образом, цикл никогда не закончится.
Комментарии:
1. Ранее я пропустил оператор «bin = bin / 10;», но теперь я добавил. пожалуйста, проверьте еще раз.
Ответ №3:
Ваш код запускается в бесконечный цикл.
while(bin!=0||bin!=1)
{
c=bin%10;
ar[i]=c;
i ;
}
Вы должны обновить значение bin как
bin = bin/10;
Я отредактировал ваш код. Вот, посмотрите
#include<stdio.h>
#include<math.h>
int main()
{
int ar[20],bin,i=0,sum=0,j,c;
printf("Enter a Binary numbern");
scanf("%d",amp;bin);
while(bin!=0)
{
c=bin%10;
ar[i]=c;
i ;
bin = bin/10;
}
//ar[i]=c;
for(j=0;j<i;j )
{
sum=sum (ar[j]*pow(2,j));
}
printf("%d",sum);
return 0;
}
Комментарии:
1. @RohitVishwakarma Ваше условие while неверно. Попробуйте удалить bin!=1 Это только устранит вашу ошибку цикла. Ваша логика неверна. Я бы посоветовал вам лучше взглянуть на вашу логику.