2016-04-26 181 views
-2

對於類,我需要創建一個將整數轉換爲相應二進制數的函數。但是,我不得不使用to_binary函數的給定main和參數。整個問題需要我打印出32位的二進制數,但要打破它,我只是試圖打印出Char陣列,我認爲我填充了整數(可能是問題)。當我編譯時,我只收到一個空行(來自\ n),我想知道如何解決這個問題。我想要做的就是能夠打印5(「101」)的二進制數字,但我似乎無法用我的教授的限制來完成。請記住:我無法更改to_binary或main中的參數,只能更改to_binary的主體。任何幫助將不勝感激。在C中打印整數char整數

#include<stdio.h> 

void to_binary(int x, char c[]) { 

    int j = 0; 

    while (x != 0) { 
     c[j] x = x % 2; 
     j++; 
    } 
    c[33] = '\0'; 
} 

int main() { 
    int i = 5; 
    char b[33]; 
    to_binary(i,b); 
    printf("%s\n", b); 
} 
+4

該代碼甚至不應該編譯任何錯誤。 ..'c [j] x = x%2;'? –

+4

此外,你似乎忘記了數組索引是基於* zero *的,所以使用索引'33'訪問數組中的元素號34。此外,[ASCII表格](http://en.cppreference.com/w/cpp/language/ascii)可能對您有所幫助,字符「1」的值不等於整數「1」 '。 –

+0

請將您的整個代碼放在帖子中。如果代碼太大,請提供[mcve](http://stackoverflow.com/help/mcve)。 – jdarthenay

回答

0

這是回答你的問題。

void to_binary(int x, char c[]) { 
    int i =0; 
    int j; 
    while(x) { 
     /* The operation results binary in reverse order. 
     * so right-shift the entire array and add new value in left side*/ 
     for(j = i; j > 0; j--) {  
      c[j] = c[j-1]; 
     } 
     c[0] = (x%2) + '0'; 
     x = x/2; 
     i++; 
    } 
    c[i]=0; 
} 
0

問題是在下面的代碼:

while (x != 0) { 
    c[j] = x % 2; // origin: c[j] x = x % 2; a typo? 
    j++; 
} 

x % 2結果是一個整數,但是你把它分配給一個字符c[j] - 整數1不等於字符'1'

如果你想一個整數(0-9)轉換爲字符形式,例如:整數7字符'7',你可以這樣做:

int integer = 7; 
char ch = '0' + integer; 
+2

一個好的答案不僅要指出問題,還要提供一個解決方案。 – kaylum

0

一個以前的答案已經討論與c[j] x = x % 2;問題和缺乏適當的字符轉換。這就是說,我會指出一個不同的問題。請注意,這不是針對您的問題的具體解決方案,而是將其視爲推薦。

對null終止符的位置進行硬編碼不是一個好主意。事實上,它可能會導致一些不受歡迎的行爲。想象一下,我創建長度爲5。在內存的自動字符數組,它可能是這個樣子:

Values = _ _ _ _ _ 
Index = 0 1 2 3 4 

如果我是「1」,填充前三個指標「0」和「1」 ,陣列可能看起來像這樣:

Values = 1 0 1 _ _ 
Index = 0 1 2 3 4 

比方說,我設置索引4包含空終止符。該陣列現在看起來像這樣:

Values = 1 0 1 _ \0 
Index = 0 1 2 3 4 

請注意索引三是一個開放時隙?這不好。在C/C++中,自動數組默認包含垃圾數值。此外,通常通過從字符到字符迭代來打印字符串,直到遇到空終止符。

如果數組看起來像它在前面的例子中,打印它會產生一個奇怪的結果。它會打印1,0,1,然後是一個奇怪的垃圾值。

解決方法是在字符串結束後直接設置空終止符。在這種情況下,你希望你的陣列看起來像這樣:

Values = 1 0 1 \0 _ 
Index = 0 1 2 3 4 

指數4的值是無關緊要的,因爲打印的功能,在閱讀指數3中止。

下面是一個代碼示例供參考:

#include <stdio.h> 

int main() { 

    const size_t length = 4; 
    char binary[length]; 
    size_t i = 0; 

    while (i < length - 1) { 
     char c = getchar(); 
     if (c == '0' || c == '1') 
      binary[i++] = c; 
    } 
    binary[i] = '\0'; 

    puts(binary); 

    return 0; 
} 
0
#include<stdio.h> 
int binary(int x) 
{ 
    int y,i,b,a[100]; 
    if(x<16) 
    { 
      if(x%2==1) 
        a[3]=1; 
      if(x/2==1||x/2==3 || x/2==5 || x/2==7) 
        a[2]=1; 
      if(x>4 && x<8) 
        a[1]=1; 
      else if(x>12 && x<16) 
        a[1]=1; 
      if(x>=8) 
        a[0]=1; 
    } 
    for(i=0;i<4;i++) 
      printf("\t%d",a[i]); 
    printf("\n"); 
} 

int main() 
{ 
    int c; 
    printf("Enter the decimal number (less than 16):\n"); 
    scanf("%d",&c); 
    binary(c); 
} 

這個代碼可以幫助它會簡單地轉換小於16的十進制數到4位二進制number.if它包含了比讓我知道