2014-07-25 29 views
2

我是新来的C. 我正在编写一个程序来打印从0到给定数字(由用户提供)的所有十进制数字,但是我的输出并不是我所期望的。我不明白什么是错在那里我写的程序....程序打印所有十进制数字从0到二进制格式的给定数字

#include <stdio.h> 
int main() 
{ 
    int x,n; 
    printf("Enter any number\n"); 
    scanf("%d",&x); 
    n=x; 
    printf("numbers in binary format\n"); 
    while(n!=0) 
    { 
     int num[8]={0,0,0,0,0,0,0,0}; 
     int y[8]={0,0,0,0,0,0,0,0}; 
     int i=7; 
     while(x!=0) 
     { 
      y[i]=x%2; 
      x=x/2; 
      i=i-1; 
     } 
     while(i!=8) 
     { 
      printf("%d",y[i]); 
      i=i+1; 
     } 
     printf("\n"); 
     n=n-1; 
    } 
} 
+1

什么是你的输出? oO –

+2

您在循环的开始处忘了'x = n'。而且你的代码可能会崩溃,数字高于255。关于样式的说明:如果它们是'for for'循环,所有'while'循环都会更容易阅读。 – mafso

+0

这个程序打印数字从给定的数字到0而不是从0到给定的数字 – mch

回答

1

你刚才忘了设定的x while循环这里面的价值是代码:

#include <stdio.h> 
int main() 
{ 
    int x,n; 
    printf("Enter any number\n"); 
    scanf("%d",&x); 
    n=x; 
    printf("numbers in binary format\n"); 
    while(n!=0) 
    { 
     x=n; 
     int y[8]={0,0,0,0,0,0,0,0}; 
     int i=7; 
     while(x!=0) 
     { 
      y[i]=x%2; 
      x=x/2; 
      i=i-1; 
     } 
     i=0; 
     while(i!=8) 
     { 
      printf("%d",y[i]); 
      i=i+1; 
     } 
     printf("\n"); 
     n=n-1; 
    } 
} 

我必须补充说明不使用变量num

+0

好的...谢谢。现在正在工作.. – sasu

+0

也epivav提供的另一个答案发现了另一个错误,没有该行程序将在某些情况下失败,我的答案是现在修复 –

1

的问题是你的第一个循环

while(x!=0) 
    { 
     y[i]=x%2; 
     x=x/2; 
     i=i-1; 
    } 

当这个循环结束,while循环是基于这样的假设,我将在大多数情况下0,和你的第二个。

只是把

i = 0; 

你的第一个循环之后。它应该工作。

0

尝试这个简单的方法 -

printf("numbers in binary format\n"); 
for(n=0;n<=x;n++) // this loop will print the number 0 to x in binary format. 
{ 
    for(i=31;i>=0;i--) // this is for 32 bit integer. if you are using 16 bit integer make i=15 in initialization. 
    { 
    if(n&(1<<i)) 
    printf("1"); 
    else 
    printf("0"); 
    } 
printf("\n"); 
} 
0

i被在第一回路被递减的值,并将其不重置为0循环之后。 请设置

i = 0循环后,它应该工作。

0

unsigned int(只有0或正数)转换为相应的字符串表示,你可以这样做:

char *bin(unsigned int number, char *result) 
{ 
    unsigned int mask = 1 << ((sizeof(unsigned int) * 8) - 1); 
    int i; 

    for (i = 0; i < sizeof(unsigned int) * 8; i++) 
    { 
     if (number & mask) 
     { 
      result[i] = '1'; 

     } 
     else 
     { 
      result[i] = '0'; 
     } 

     number <<= 1; 
    } 

    result[i]='\0'; //Terminate the string 

    return result; 
} 

在开始的时候创建mask作为一个数字,是所有零,除了最重要的一点。

然后它将该掩码的二进制结尾与要转换的数字的最高有效位进行比较,并将01放入字符串中。

然后它转换数字进行转换,以便最重要的位丢失,而第二个最重要的位置现在是最重要的位置,并继续进行,直到数字完全转换为字符串。

最后它终止字符串。

你可以这样调用它:

int main() 
{ 
    int i, to; 
    printf("Enter any number\n"); 
    scanf("%d", &to); 
    char *result = calloc((sizeof(unsigned int) * 8) + 1, sizeof(char)); 

    for (i = 0; i <= to; i++) 
    { 
     printf("%s\n", bin(i, result)); 
    } 

    free(result); 

    return 0; 
} 
相关问题