C 打印刚初始化的变量时未定义的行为

C 打印刚初始化的变量时未定义的行为,c,initialization,C,Initialization,我最近开始学习C编程。作为练习的一部分,我使用了以下程序: #include<stdio.h> int main() { int a; int b; int c; a = 350 ; if (a >= 400) { b = 800 ; c = 500 ; } printf("%d %d\n", b,c); return 0; } 对于a=350,

我最近开始学习C编程。作为练习的一部分,我使用了以下程序:

#include<stdio.h>

int main()    {

    int a;
    int b;
    int c;

    a = 350 ;

    if (a >= 400)  {

        b = 800 ;
        c = 500 ;

    }

    printf("%d %d\n", b,c);
    return 0;
}       
对于a=350,我得到327670作为输出。 对于a=401,我得到了预期的输出

请帮我解决相关问题。
提前感谢

这并没有什么意外。如果a=350,则变量b和c未初始化;因此,它们包含随机信息;当你把它们打印出来的时候,你会得到垃圾。这可能是你练习的目标

更详细地编辑:

int b;
b现在包含垃圾;因为你没有给b赋值;它只包含分配此空间时意外出现在内存中的值。如果您这样做:

b = 800;

现在b包含值800。。。但是当a=350时,你就不能进入这部分代码;b的值仍然未定义

让我们更简单一些

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

    a = 350 ;
    if (350 >= 400)  
    {

        b = 800 ;
        c = 500 ;
    }
    printf("%d %d\n", b,c);
    return 0;
}
而是使用变量,想象一下我使用的是值 现在350小于400,所以如果 这就是为什么b,c是未初始化的,但它们具有垃圾值
这就是为什么很容易得到未定义的行为,变量b和c只有在满足“if”条件(即a>=400)时才会初始化为各自的值,对于<400输出时的其余条件,b和c将是一些垃圾值

在代码中,b和c被声明但未初始化。 未初始化的自动或局部变量将具有垃圾值。
因此,在声明时初始化本地/自动变量是一种很好的做法。

b和c只有在a>=400时才会初始化。你有一个=350;。如果没有某种形式的赋值初始化或直接赋值,甚至对b和c进行求值,那么当a<400时,这会调用未定义的行为,你怎么能期望该条件为真呢。也就是说,没有确定的结果。无论您从输出中得到什么,对于为什么打印这些值都没有明确的特征,因为它们是在您的编程没有首先执行明确的行为的情况下获得的。