2016-04-26 145 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它包含了比让我知道