C语言中最容易犯的几个错误的参考

C说话的最大年夜特征是:功能强、应用方便机动。C编译的法度榜样对语法反省并不象其它高档说话那么严格,这就给编程职员留下“机动的余地”,但照样因为这个机动给法度榜样的...


C说话的最大年夜特征是:功能强、应用方便机动。C编译的法度榜样对语法反省并不象其它高档说话那么严格,这就给编程职员留下“机动的余地”,但照样因为这个机动给法度榜样的调试带来了许多不便,尤其对初学C说话的人来说,常常会出一些连自己都不知道错在哪里的差错。看着有错的法度榜样,不知该若何改起,本人经由过程对C的进修,积累了一些C编程时常犯的差错,写给各位学员以供参考。

1.书写标识符时,轻忽了大年夜小写字母的差别。

main()

{

int a=5;

printf("%d",A);

}

编译法度榜样把a和A觉得是两个不合的变量名,而显示掉足信息。C觉得大年夜写字母和小写字母是两个不合的字符。习气上,符号常量名用大年夜写,变量名用小写表示,以增添可读性。

2.轻忽了变量的类型,进行了分歧法的运算。

main()

{

float a,b;

printf("%d",a%b);

}

%是求余运算,获得a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不容许进行“求余”运算。

3.将字符常量与字符串常量肴杂。char c;

c="a";

在这里就肴杂了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“\”作字符串停止标志,它是由系统自动加上的,以是字符串“a”实际上包孕两个字符:‘a'和‘\',而把它赋给一个字符变量是不可的。

4.轻忽了“=”与“==”的差别。

在许多高档说话中,用“=”符号作为关系运算符“即是”。如在BASIC法度榜样中可以写

if (a=3) then …

但C说话中,“=”是赋值运算符,“==”是关系运算符。如:

if (a==3) a=b;

前者是进行对照,a是否和3相等,后者表示假如a和3相等,把b值赋给a。因为习气问题,初学者每每会犯这样的差错。

5.忘怀加分号。

分号是C语句中弗成缺少的一部分,语句末端必须有分号。

a=1

b=2

编译时,编译法度榜样在“a=1”后面没发明分号,就把下一行“b=2”也作为上一行语句的一部分,这就会呈现语法差错。改错时,无意偶尔在被指出有错的一行中未发明差错,就必要看一下上一行是否遗漏落了分号。

{ z=x+y;

t=z/100;

printf("%f",t);

}

对付复合语句来说,着末一个语句中着末的分号不能轻忽不写(这是和PASCAL不合的)。

6.多加分号。

对付一个复合语句,如:

{ z=x+y;

t=z/100;

printf("%f",t);

};

复合语句的花括号后不应再加分号,否则将会枝节横生。

又如:

if (a%3==0);

I++;

本是假如3整除a,则I加1。但因为if (a%3==0)后多加了分号,则if语句到此停止,法度榜样将履行I++语句,不论3是否整除a,I都将自动加1。

再如:

for (I=0;I10时,二者结果就不合了。由于while轮回是先判断后履行,而do-while轮回是先履行后判断。对付大年夜于10的数while轮回一次也不履行轮回体,而do-while语句则要履行一次轮回体。

14.定义数组时误用变量。

int n;

scanf("%d",&n);

int a[n];

数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量。即C不容许对数组的大年夜小作动态定义。

15.在定义数组时,将定义的“元素个数”误觉得是可使的最大年夜下标值。

main()

{static int a[10]={1,2,3,4,5,6,7,8,9,10};

printf("%d",a[10]);

}

C说话规定:定义时用a[10],表示a数组有10个元素。其下标值由0开始,以是数组元素a[10]是不存在的。

16.初始化数组时,未应用静态存储。

int a[3]={0,1,2};

这样初始化数组是纰谬的。C说话规定只有静态存储(static)数组和外部存储(exterm)数组才能初始化。应改为:

static int a[3]={0,1,2};

17.在不应加地址运算符&的位置加了地址运算符。

scanf("%s",&str);

C说话编译系统对数组名的处置惩罚是:数组名代表该数组的肇端地址,且scanf函数中的输入项是字符数组名,不需要再加地址符&。应改为:

scanf("%s",str);

18.同时定义了形参和函数中的局部变量。

int max(x,y)

int x,y,z;

{z=x>y?x:y;

return(z);

}

形参应该在函数体外定义,而局部变量应该在函数体内定义。应改为:

int max(x,y)

int x,y;

{int z;

z=x>y?x:y;

return(z);

}

以上差错中可能有些不相符新版的C说话,比如数组的初始化,新版中就可所以不是静态变量。

发表评论
加载中...

相关文章