为什么在输入错误的值类型时,变量“ b”总是分配给1?

问题描述 投票:-1回答:1

在此简单代码中,

#include <stdio.h>
int main(void)
{
     int a, b;
     scanf("%d %d",&a,&b);
     printf("\nThe value of a is : %d",a);
     printf("\nThe value of b is : %d",b);
}

当我输入错误的值类型作为输入时,变量b总是被赋值为1。我尝试添加另一个变量“ c”并在代码末尾打印其值,但是仍然始终将变量“ b”分配给1。为什么?

The output:-

c output
1个回答
1
投票

如果返回不成功,则scanf()后的scanf()参数的值不确定,但是最可能的行为是保持不变。在这种情况下,b未初始化,因此可以具有任何值,而与scanf()的行为无关。

考虑:

#include <stdio.h>
int main(void)
{
    int a = -1, b = -1;
    scanf("%d %d",&a,&b);
    printf("\nThe value of a is : %d",a);
    printf("\nThe value of b is : %d",b);

    return 0 ;
}

在这种情况下,我希望ab都具有输入值或-1,如果转换失败-即使实际上不是必需的。

scanf()返回转换和分配的参数数量。考虑:

#include <stdio.h>
int main(void)
{
    int a = 0, b = 0;
    int convert = scanf("%d %d",&a,&b) ;
    if( convert > 0 )
    {
        printf("\nThe value of a is : %d",a);

        if( convert > 1 )
        {
            printf("\nThe value of b is : %d",b);
        }
        else
        {
            printf("\nThe value of b is undefined" );
        }
    }
    else
    {
        printf("\nThe value of a is undefined" );
    }

    return 0 ;
}

对于您的测试输入54test hello,它输出:

45测试你好a的值是:45b的值不确定
© www.soinside.com 2019 - 2024. All rights reserved.