C程序不显示值

C程序不显示值,c,C,当我调用multi时,它会很好地计算二进制数,但不会计算加法。如果我按顺序切换这两个,它将计算加法,而不计算乘法。第二个函数调用没有显示其值是否有原因?它将打印printf,但不会打印值。任何帮助都会很好 #include <stdio.h> long binary1, binary2, binary3, binary4, multiply = 0; int binaryproduct(int, int); int digit, factor = 1; int multi(); i

当我调用multi时,它会很好地计算二进制数,但不会计算加法。如果我按顺序切换这两个,它将计算加法,而不计算乘法。第二个函数调用没有显示其值是否有原因?它将打印printf,但不会打印值。任何帮助都会很好

#include <stdio.h>

long binary1, binary2, binary3, binary4, multiply = 0;
int binaryproduct(int, int);
int digit, factor = 1;
int multi();
int adding();


int main()
{
    binary3 = binary1;
    binary4 = binary1;

    printf("Enter the first binary number: ");
    scanf("%ld", &binary1);

    printf("Enter the second binary number: ");
    scanf("%ld", &binary2);

    multi();   
    printf("\n");
    adding();
}

int adding()
{
    int i = 0, remainder = 0, sum[20];

    while (binary3 != 0 || binary4 != 0) {
        sum[i++] =(binary3 % 10 + binary4 % 10 + remainder) % 2;
        remainder =(binary3 % 10 + binary4 % 10 + remainder) / 2;
        binary1 = binary3 / 10;
        binary2 = binary4 / 10;
    }

    if (remainder != 0) {
        sum[i++] = remainder;
    }

    --i;

    printf("Sum of two binary numbers: ");

    while (i >= 0) {
        printf("%d", sum[i--]);
    }

    return 0;
}


int multi()
{
    while (binary2 != 0) {
        digit =  binary2 % 10;
        if (digit == 1) {
            binary1 = binary1 * factor;
            multiply = binaryproduct(binary1, multiply);
        } else {
            binary1 = binary1 * factor;
        }
        binary2 = binary2 / 10;
        factor = 10;
    }

    printf("Product of two binary numbers: %ld", multiply);
    return 0;
}

int binaryproduct(int binary3, int binary4)
{
    int i = 0, remainder = 0, sum[20];
    int binaryprod = 0;

    while (binary1 != 0 || binary2 != 0) {
        sum[i++] =(binary1 % 10 + binary2 % 10 + remainder) % 2;
        remainder =(binary1 % 10 + binary2 % 10 + remainder) / 2;
        binary1 = binary1 / 10;
        binary2 = binary2 / 10;
    }

    if (remainder != 0) {
        sum[i++] = remainder;
    }

    --i;

    while (i >= 0) {
        binaryprod = binaryprod * 10 + sum[i--];
    }

    return binaryprod;
}

您的全局变量未初始化。在添加您使用的函数时:

二进制1=二进制3/10

二进制2=二进制4/10

在binaryproduct函数中有两个名为binary3和binary4的本地int,您不使用它们


您应该使用唯一的名称,初始化变量,在不需要全局变量的地方使用局部变量。

可能是因为您将所有内容都设置为全局变量。使用参数。顺便说一句,你的乘积函数给出的是10*10=101,这似乎不太正确。添加中的while循环在输入后将永远不会退出,因为保护值在循环中不会被修改。long binary1,binary2,binary3,binary4,multiply=0;Sum永远不会正确打印,即使没有multi;如果0是需要初始化的数字,则Globals不需要初始化。您没有看问题,是吗?adding和multi都会检查变量是否为0。如果要测试函数,则需要在调用adding和multi之前初始化变量。