十进制到二进制转换代码,提供一些不寻常的数据

时间:2015-04-12 12:15:30

标签: c

这是我的十进制到二进制转换程序的代码:

#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来自哪里?

任何帮助!!

2 个答案:

答案 0 :(得分:1)

由于两个原因,您的代码会调用未定义的行为。

    当程序执行到达

    时,
  1. q未初始化

    while(q>0)
    
  2. 其次,当它高于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
}