//输入“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++;
}
答案 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;
}