Я написал этот код для преобразования из двоичного в десятичный, но не получаю результат. На экране ничего не печатается

#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 Это только устранит вашу ошибку цикла. Ваша логика неверна. Я бы посоветовал вам лучше взглянуть на вашу логику.