在C中打印Char整数数组

时间:2016-04-26 05:19:41

标签: c arrays char printf

对于类,我需要创建一个将Integer转换为相应二进制数的函数。但是,我被迫使用给定的main和to_binary函数的参数。整个问题要求我打印出32位二进制数,但为了打破它,我只是试图打印出Char数组,我以为我填充了整数(也许是问题)。当我编译时,我只收到一个空白行(来自\ n),我想知道如何解决这个问题。我想要做的就是能够打印5(“101”)的二进制数,但我似乎无法用我教授的限制来做。请记住:我无法更改to_binary或main中的参数,只能更改to_binary的主体。任何帮助将不胜感激。

#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 个答案:

答案 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)转换为字符形式,例如:integer '1'到字符7,则可以执行以下操作:

'7'

答案 1 :(得分:0)

之前的答案之一已经讨论了c[j] x = x % 2;的问题以及缺乏正确的字符转换。话虽如此,我反而指出了一个不同的问题。请注意,这不是您问题的具体解决方案,而是将其视为推荐。

对空终止符的放置进行硬编码并不是一个好主意。实际上,它可能会导致一些不良行为。想象一下,我创建了一个长度为5的自动char数组。在内存中,它可能看起来像这样:

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

如果我使用&#39; 1&#39;,&#39; 0&#39;和&#39; 1&#39;填充前三个索引,则数组可能如下所示:

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

假设我设置索引4以包含空终止符。该阵列现在看起来像这样:

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

注意索引3是一个开放的插槽?这是不好的。在C / C ++中,自动数组默认包含垃圾值。此外,字符串通常通过从字符到字符的迭代来打印,直到遇到空终止符。

如果阵列看起来像前面的例子那样,打印它会产生一个奇怪的结果。它会打印1,0,1,然后是一个奇怪的垃圾值。

解决方案是在字符串结束后直接设置null终止符。在这种情况下,您希望您的数组看起来像这样:

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;
}

答案 2 :(得分: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; 
}

答案 3 :(得分: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位二进制数。如果它包含任何错误而不是让我知道

相关问题