2014-07-25 58 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; 
} 
相關問題