C语言为什么先定义后赋值会出错而定义的同时赋值就没有错??

代码如下

#include <stdio.h>

char a;
//int letters=0,digit=0,space=0,others=0;

int letters, digit, space, others;

letters=0;
digit=0;
space=0;
others=0;

void main ()
{
printf ("输入一行字符:\n");

do
{
scanf ("%c",&a);

if (a<='Z'&&a>='A')
letters++;
else if (a<='z'&&a>='a')
letters++;
else if (a<='9'&&a>='0')
digit++;
else if (a==' ')
space++;
else
others++;
}

while (a!='\n');

printf ("letters=%d,digit=%d,space=%d,others=%d\n",letters,digit,space,others);
}

报错如下:
april_6_5.cpp
D:\visual c++ 6.0\visual c++\Microsoft Visual Studio\MyProjects\april_6_5\april_6_5.cpp(11) : error C2501: 'letters' : missing storage-class or type specifiers
D:\visual c++ 6.0\visual c++\Microsoft Visual Studio\MyProjects\april_6_5\april_6_5.cpp(11) : error C2086: 'letters' : redefinition

而直接在定义变量的时候赋值就没有错。为什么

经测试  两种方式都可以,你之所以出现上述错误是因为你的编译的语言不对,你这是标准的C语言,而你用的文件后缀是.cpp,这是标准的C++语言的,所以会出现这种错误,C++语言全局变量必须要声明的时候赋值,不可以在全局给他 在声明之后再写语句赋值。你可以改为后缀名.c或者是.h的来编译  就可以了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-06
对变量的非初始化赋值操作必须在函数中进行.
letters=0 这几个赋值写到main函数里就可以了。
第2个回答  2014-04-06
letters=0;
digit=0;
space=0;
others=0;
在函数外声明的就是全局变量,你这个赋值是执行语句而不是声明语句。本回答被网友采纳
第3个回答  2014-04-06
nt letters, digit, space, others;//这一样的符号现在是中文的,另外原来你不是放在main函数里面的 楼下正解
相似回答