2016-11-29 110 views
0

我創建的代碼只是從用戶獲得一個十進制數並將其轉換爲二進制。我試圖從0到輸入的十進制數字的二進制數製成一個二進制計數器。二進制數的位存儲在一個數組中,每一位都有自己的位置。我明白,我將不得不作出一個二維數組來做到這一點,但我不知道如何或在哪裏實施這個二維C在二維計數器

#include <stdio.h> 
#include <math.h> 

int main(void){ 

    int binary,loop_number,i; 
    printf("Enter in your binary number :"); 
    scanf("%d", &binary); 

    //loop number calculates the number of bits of the binary number 
    loop_number = log2(binary)+1; 
    int binary_array[binary][loop_number]; 
    int newarray[binary][loop_number]; 

    for(int n=0;n<binary;n++) { 
     for(i=0;i<loop_number;i++) { 
      if(n==1){ 
       binary_array[n][i]=1; 
      } else if(n%2==0) { 
       binary_array[n][i]=0; 
      } else if(n==0) { 
       binary_array[n][i]=0; 
      } else { 
       binary_array[n][i]=1; 
      } 
     n = n/2; 
     } 

     //the binary array of bits is backwards here so im going to put the bits the correct way 

     for(int n=0;n<binary;n++) { 
      for(i = 0; i < loop_number; i++){ 
       newarray[n][i] = binary_array[n][loop_number-i-1]; 
      } 
     } 
    } 

    printf("\n\n"); 
    for(int n=0;n<binary;n++){ 
     for(i=0;i<loop_number;i++){ 
      printf("%d",newarray[n][i]); 
     } 
     printf("\n"); 
    } 
} 
+1

嗯,轉換爲二進制?爲什麼你需要一個二維數組?我認爲一個小循環會做這樣的事情:'for(i = 0,bit = 1; bit Holger

回答

0

你的代碼是非常難讀,我有基本的建議,以改善你的代碼:

  1. 縮進代碼。
  2. 使用字符之間的多個空格,比如寫在for循環這樣for(n = 0; n < binary; n++)而不是for(n=0;n<binary;n++)
  3. 最初的gcc,因爲你有最後的兩個for循環後兩個額外的大括號不編譯代碼。
  4. 僅當我們添加-std = c99和-lm標誌時,gcc纔會編譯您的代碼。首先是因爲你已經直接在循環中寫入for循環索引的聲明。第二個是因爲LOG 2功能(調查爲何試試這個gcc will not properly include math.h

的問題是在第一個雙循環:

for(n = 0; n < binary; n++){ 
    for(i = 0; i < loop_number; i++){ 

     // Use a switch instead of a cascade of else-if 
     if(n==1){ 
      binary_array[n][i]=1; 
     } 
     else if(n%2==0){ 
      binary_array[n][i]=0; 
     } 
     else if(n==0){ 

      binary_array[n][i]= 0; 

     }else{ 
      binary_array[n][i]=1; 
     } 

     n = n/2; // Here we have an infinite loop because n is never equal to binary, at each iteration the n counter is    divided for 2 
    } 
} 

所以,我不明白你的算法想要實施。我認爲算法是這樣的:dividedBy2

你不需要一個二維數組,而是嘗試使用堆棧。我寫了我自己的算法實現,我希望這可以幫助你。我認爲這段代碼正確地實現了算法,但如果你會發現一些錯誤,請告訴我。 http://pastebin.com/uC5zp2Va