我编写了这个代码,用于从二进制到十进制的转换,但没有得到输出。没有什么东西在屏幕上打印

时间:2016-10-02 15:41:42

标签: 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 number\n");
    scanf("%d",&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++;
    }

3 个答案:

答案 0 :(得分:2)

这一行

while(bin!=0||bin!=1)

将导致无限循环

bin!=0 || bin!=1
由于使用true

始终会评估||

单词:bin将始终不同于0 与1不同。

示例:

  

如果bin为2,则两个部分都为true

     

如果bin为1,则第一部分为true,由于或(true

,您获得||      

如果bin为0,则第一部分为false,但第二部分为true,由于或(true),您获得||

也许你想要一个和&&,而不是||

此外,您必须更改循环内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("error\n");
    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: %d\n", value);

  return 0;
}

答案 1 :(得分:1)

[评论太久了]

好的,再次:

只要(bin!=0||bin!=1)为真,while循环就应该循环。

这意味着它应该突然相反:

!(bin!=0||bin!=1)

应用De Morgan's Law我们发现上述内容相当于:

(bin==0 && bin==1)

仔细观察以上内容,我们认为确实需要bin同时等于0和1。这是不可能的。所以循环永远不会结束。

答案 2 :(得分:0)

您的代码会遇到无限循环。

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 number\n");
scanf("%d",&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;

}