2017-04-11 94 views
1

大家好,我想一些幫助,一個代碼,我正在寫,SCANF越來越垃圾文件

void main() 
{ 

    int num4, num3, sum3, a, b, c, d, e, f, g, h, sum; 
    printf("enter two binary numbers\n"); 

    scanf("%d", &num3); 
    scanf("%d", &num4); 
    sum = num3 | num4; 
    a = (sum/10000000) % 10; 
    b = (sum/1000000) % 10; 
    c = (sum/100000) % 10; 
    d = (sum/10000) % 10; 
    e = (sum/1000) % 10; 
    f = (sum/100) % 10; 
    g = (sum/10) % 10; 
    h = (sum/1) % 10; 
    sum3 = (a * 128) + (b * 64) + (c * 32) + (d * 16) + (e * 8) + (f * 4) + (g * 2) + (h); 
    printf("the answer is %d\n", sum3); 

} 

看來我的scanf「NUM3」是「num4」越來越其輸入後得到的垃圾文件,有人知道爲什麼嗎?

+1

*您輸入的程序是什麼?什麼是預期的*和*實際產出? –

+0

這個 – pm100

+0

有一些非常*奇怪的代碼你對'scanf()'的調用返回了什麼?你忽略了返回值 - 這不是一個好主意。 –

回答

1

假如你輸入的數字0和1串,這是你正在尋找的代碼:

#include <stdio.h> 

int decode_binary(int n) { 
    int a, b, c, d, e, f, g, h; 
    a = (n/10000000) % 10; 
    b = (n/1000000) % 10; 
    c = (n/100000) % 10; 
    d = (n/10000) % 10; 
    e = (n/1000) % 10; 
    f = (n/100) % 10; 
    g = (n/10) % 10; 
    h = (n/1) % 10; 
    return (a * 128) + (b * 64) + (c * 32) + (d * 16) + (e * 8) + (f * 4) + (g * 2) + (h); 
} 

int main() 
{ 

    int num4, num3, sum; 
    printf("enter two binary numbers\n"); 

    scanf("%d", &num3); 
    scanf("%d", &num4); 

    num3 = decode_binary(num3); 
    num4 = decode_binary(num4); 

    sum = num3 | num4; 
    printf("the answer is %d\n", sum); 

    return 0; 
} 

我認爲輸入已經「二進制」,我該如何解碼呢?

那麼,在%d讀取scanf十進制值(即,數字串09,相對位置值10 ^位置,最右位置開始分配了0次冪)。

因此,如果您scanf給出(例如「138」和「143」,我的意思是,數字這個確切順序)十進制值,然後num3num4都會有這兩個值的二進制表示。

但如果你希望scanf給予二進制值(例如「10001010」和「10001111」)請記住,scanf仍然認爲這些都是十進制值 - 那就是,num3num4將會有10,001,010(千萬,一千和十)和10,001,111(十千,一千,一百一十)的二進制表示 - 所以你需要對它們進行解碼(也就是說,將每個位置設置爲2的冪) ,最右邊的數字是第0次方)。

+0

非常感謝,! –

+0

變量名稱'sum'一詞具有誤導性。 「或」操作不是一個總和操作。例如可以說num3 = 12和num4 = 8。二進制表示是num3 = 1100和num4 = 0100。當你進行「或」操作時,結果是1100,仍然是12。 –