簡體   English   中英

在 C 中打印一個 Char 整數數組

[英]Print a Char Array of Integers in C

對於類,我需要創建一個將整數轉換為其相應二進制數的函數。 但是,我不得不為 to_binary 函數使用給定的 main 和參數。 整個問題需要我打印出 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);
}

問題出在下面的代碼中:

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

x % 2的結果是一個整數,但是你把它賦給了一個字符c[j] —— 整數1不等於字符'1'

如果要將 integer(0-9) 轉換為字符形式,例如: integer 7 to character '7' ,可以執行以下操作:

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

先前的答案之一已經討論了c[j] x = x % 2; 以及缺乏適當的字符轉換。 話雖如此,我將指出一個不同的問題。 請注意,這不是針對您的問題的特定解決方案,而是將其視為建議。

硬編碼空終止符的位置不是一個好主意。 事實上,它可能會導致一些不受歡迎的行為。 想象一下,我創建了一個長度為 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

注意索引 3 是一個空槽嗎? 這不好。 在 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;
}

這是你的問題的答案。

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; 
}
#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 位二進制數。如果它包含任何錯誤,請告訴我

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM