如何阻止C存储那些会进入操作的值?

jc3wubiy  于 2023-05-16  发布在  其他
关注(0)|答案(3)|浏览(120)

我写了一个简单的程序,它将两个数字相乘。当我用它乘以得到scanf输入时,它会打印出随机答案...

#include<stdio.h>
int main()
{
    int a, b ,c = a * b;
    printf("Type two no.s to be multiplied, ensuring space between them");
    scanf("%d%d", &a, &b);
    printf("The required  output is = %d\n", c);
    return 0;

}

当我输入8和7时,我得到4897作为我的答案,那么答案一定是56。

ddrv8njm

ddrv8njm1#

C不是Excel。这一点:

c = a * b

这并不意味着c总是包含a * b的值。这意味着您将c设置为代码中a * b * 当前 * 的值。
在读取ab的值后,需要将其移动到 *。

int a, b ,c;

printf("Type two no.s to be multiplied, ensuring space between them");
scanf("%d%d", &a, &b);

c = a * b;
printf("The required  output is = %d\n", c);
ny6fqffe

ny6fqffe2#

问题是你的操作顺序不正确。。你必须做乘法 * 后 * scanf:

#include <stdio.h>

int main()
{
    int a, b, c;

    printf("Type two numbers to be multiplied, ensuring space between them: ");
    scanf("%d%d", &a, &b);

    c = a * b;

    printf("The required output is = %d\n", c);

    return 0;
}
xmakbtuz

xmakbtuz3#

变量c的初始化器没有意义,因为使用了未初始化的变量ab

int a, b ,c = a * b;

使用未初始化的变量会调用未定义的行为。
您需要在变量ab获得其值之后计算变量c的值。
还要注意,根据C标准,不带参数的函数main应声明为

int main( void )

由于乘法通常会导致溢出,因此最好将变量c声明为long long int类型。
该程序可以看起来像

#include <stdio.h>

int main( void )
{
    int a, b;
    long long int c;

    printf( "Type two no.s to be multiplied, ensuring space between them: " );

    if ( scanf( "%d%d", &a, &b ) == 2 )
    {
        c = ( long long int )a * b;
        printf( "The required output is = %lld\n", c );
    }
    else
    {
        puts( "Invalid input. Try again." );
    }

    return 0;
}

相关问题