变量或函数的定义为啥不能放在gets/puts,scanf/printf这类函数之后?

int a;
scanf("%d",&a);
int b;
b+=a;
编译报错,但是int b放到scanf()之前可以:
int a;
int b;
scanf("%d",&a);
b+=a;
编译没问题。

测试过了不是变量没有初始化的问题:
int a=1;
putchar(' ');
int b=1;
也不行
环境win7+vs2010

在第一个代码片段中,变量b没有明确初始化,即没有为其设置初值。因此,在对其调用 += 操作符之前,该变量的值可能是任意的,包括未定义的值。这是一种不好的编程习惯,且可能导致程序出现运行时错误或产生不稳定的结果。编译器会发出警告或错误提示,以帮助开发人员避免此类问题。

在第二个代码片段中,变量b先被显式初始化为0,因此在对其使用+=操作符之前已经有了明确定义的值。这消除了上述问题并使得代码可以正常编译执行。

因此,为了避免这种类型的错误,请始终对变量进行明确的初始化(赋初值),或者先在使用它们之前将其设置为具有明确定义的值