为什么这个程序不为任何大于3的值提供输出?

时间:2015-01-04 06:41:38

标签: c loops binary

我编写了这个程序,将十进制整数转换为二进制形式。但是,当我输入大于3的输入时,程序就会挂起。我在做什么错误?

#include<stdio.h>
int main()
{
    int num,q,r,bin=0,i=1;
    printf("Enter a number:\t");
    scanf("%d",&num);
    while(q>1){
         q= num/2;
         r= num%2;
         bin=(r*i)+bin;
         i*= 10;
     }
    bin=(1*i)+bin;
    printf("\nThe binary equivalent is: \t%d",bin);
    return 0;
}

2 个答案:

答案 0 :(得分:3)

关于您的代码的两件事:

while(q>1){
     q= num/2;
  1. 你没有初始化q,可能会也可能不会进入while循环。
  2. 如果num只是4​​,则q将始终计算为2并且永远不会结束并导致无限循环。因此,您应该检查num > 0而不是q > 1num = num /2。类似的东西:

    while(num>0){
       r = num%2;
       num = num/2;
       bin=(r*i)+bin;
       i*= 10;
    }
    printf("\nThe binary equivalent is: \t%d",bin);
    

答案 1 :(得分:2)

int q;
未使用未初始化的变量初始化

导致未定义的行为,如

while(q>1){

检查以下代码:

#include<stdio.h>
int main()
{
    int num,r,q,i=0;
    int a[20];
    printf("Enter a number:\t");
    scanf("%d",&num);
    while(num>0){
         r= num%2;
         num= num/2;
       a[i++] = r;
     }
    for(q=i-1;q>=0;q--)
    printf("%d",a[q]);
    return 0;
}