这是我的十进制到二进制转换程序的代码:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int q,r,bn[20],i=0,n;
printf("enter the decimal integer:");
scanf("%d",&n);
while (q>0)
{
q=n/2;
r=n%2;
bn[i]=0;
bn[i]=r;
n=q;
i=i+1;
}
while(i>=0)
{
printf("%d ",bn[i]);
i=i-1;
}
}
现在输出是这样的: 输入十进制整数:2 1628731552 1 0 现在我不明白这个号码1628731552来自哪里?
任何帮助!!
答案 0 :(得分:1)
由于两个原因,您的代码会调用未定义的行为。
q
未初始化
while(q>0)
其次,当它高于0时,你需要增加i
:
if(q>0)
i=i+1;
否则,当您输入2时,当第一个i
循环退出且您的上一个while
将访问printf
(未初始化)时,a[2]
将为2最后一次while
循环的第一次迭代。
或者,您可以在两个循环之间使用i--
或i=i-1;
来解决此问题。
答案 1 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
void main()
{
int q,r,bn[20],i=0,n;
printf("enter the decimal integer:");
scanf("%d",&n);
while (n>0) //fix
{
q=n/2;
r=n%2;
//bn[i]=0;
bn[i]=r;
n=q;
i=i+1;
}
i--;//go to last idx
while(i>=0)
{
printf("%d",bn[i]);
i=i-1;
}
printf("\n"); // end
}