声明变量的位置问题

初学C语言,这是我写的一个程序:
#include <stdio.h>
#include <string.h>
int main(void)
{
char fname[20],lname[20];
int n,m;

printf("Please enter your first name:\n");
scanf("%s",&fname);
printf("Please enter your last name:\n");
scanf("%s",&lname);

n = strlen(fname);
m = strlen(lname);

printf("%s %s\n",fname,lname);
printf("%*d %*d\n",n,n,m,m);
printf("%s %s\n",fname,lname);
printf("%-*d %-*d",n,n,m,m);

getch();
return 0;
}
当我把int n,m;放在scanf()后一句,程序就要报错,而把int n,m;放在开头就没有错。这是什么原因?不是说只要在首次使用变量前声明变量就可以了吗?

第1个回答  2013-09-24
这个跟编译器的原理有关系。大部分的c语言编译器要求变量的声明在程序最前面。所以当你将声明移到scanf下面时,会出现这种错误。而c++则不会。本回答被提问者采纳
第2个回答  2013-09-25
可能和编辑器有关吧
一般的编辑器应该可以随时申请变量吧

不过建议在main头部申请全部的变量,最好不要在中间申请,这样查错麻烦
在中间申请,牵扯到一个生命周期的问题,一不小心可能出错
第3个回答  2013-09-24
C规定变量声明必须(而不是一般)放在函数或文件的开头,甚至可以建立一个头文件包含进来;而C++允许在代码中间不产生歧义的地方声明和定义变量。
第4个回答  2013-09-24
你先要给变量分配内存后,当你输入的时候你的变量才有地方放啊!反之,你输入的变量是没有地方放置的!
第5个回答  2013-09-24
这是标准C,变量必须在块开始声明,c++允许任何位置声明