Scanf正在获取垃圾文件

时间:2017-04-11 15:44:52

标签: c

大家好,我想帮助我写一些代码,

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

我认为输入已经是&#34;二进制&#34;,我如何解码它们?

嗯,%d中的scanf读取十进制值(即数字09的字符串,相对位置值为10 ^位置,最右边的位置开始分配了0次幂。

因此,如果您的scanf被赋予十进制值(例如&#34; 138&#34;和&#34; 143&#34;,我的意思是,这个确切的序列数字),然后num3num4将具有这两个值的二进制表示。

但是,如果您希望scanf获得二进制值(例如&#34; 10001010&#34;以及&#34; 10001111&#34;)请注意,scanf 仍然认为这些是小数值 - 也就是说,num3num4将具有小数10,001,010(千万,千)的二进制表示形式和10)和10,001,111(十亿,一千,一百一十一) - 所以你需要解码它们(也就是说,每个位置是2的幂,最右边的数字是0次幂。) / p>

相关问题