问个有关问题C语言的简单有关问题

问个问题C语言的简单问题
#include "stdio.h"

void main()
{
  int a;
  printf("请输入一个数");
  scanf("%d",&a);
  printf("%d",a);
  getch();
}  
这样可以编译运行。

#include "stdio.h"

void main()
{
  printf("请输入一个数");
  int a;
  scanf("%d",&a);
  printf("%d",a);
  getch();
}
这样为什么错了?

第二个程序,我也是在使用a之前为a分配了内存啊,错在哪里?请深层次解答,不要泛泛之谈。

简单题目也能看出大智慧,还望各位大神不吝赐教。

------解决方案--------------------
你的编译器不支持C99

在C99之前要求在函数内部变量的声明必须全部写在前面
------解决方案--------------------
有点编译器函数里的变量声明都要在函数里一开始进行的。
老的C标准吧。
------解决方案--------------------
编译器不支持C99
------解决方案--------------------
#include <conio.h> 
 
这个头文件不是C语言的标准头文件,,在C standard library,ISO C 和POSIX标准中均没有定义。   
conio是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。 
所以你不叫这个头文件而下面用到getch(),是会报警告的。
还有一个,C语言中变量要在最开始声明,不能在程序中间声明,这是规定,C++中才可以在中间声明的。所以你这里声明,编译器不认识,导致错误。我一直用的是VC,至于其他的编译器,我不是很清楚。
------解决方案--------------------
探讨

#include <conio.h>

这个头文件不是C语言的标准头文件,,在C standard library,ISO C 和POSIX标准中均没有定义。
conio是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。
所以你不叫这个头文件而下面……

------解决方案--------------------
老的C标准中变量必须都声明在最前头。
------解决方案--------------------
探讨
老的C标准中变量必须都声明在最前头。

------解决方案--------------------
探讨

你的编译器不支持C99

在C99之前要求在函数内部变量的声明必须全部写在前面