menu

C语言初学者经常会犯的一些错误


拼写问题

对于C初学者来说,拼写问题出现的比较多。请各位读者找出下面的代码片段的错误。

#inculde <stdio.h>
#define a b
int mian(){
//...
return 0;
}

首先我们很容易会发现inculde这个问题。其次,主函数main(){}这一段也不正确,经常会由于汉语拼音习惯打成mian函数。

if while等带有循环体或执行体的语句执行情况问题

例如下面2个例子:

...
	if(i<=0);
		fun(x);
...

...
	int i,b=1;
	for (i=0;i<1000;i++);
		b++;
...

乍一看这2段代码没有什么问题,不过第一段代码运行起来却不管i<=0还是i>0,程序总是执行fun(x)函数,而第二段代码的b输出却总是1

C语言的编译器mingw的gcc有一个大坑就是不会提示没有执行体,像是上面的代码完全可以编译通过。

这种的避免方式最好是在每一个ifwhile等后面都加上{}以避免循环体的问题。

例如像下列代码:

...
	if (i<=5){
		i++;
	}
...

计算表达式的问题

请读者找出下列代码错误。(其中包含的变量已经定义并初始化)

...
	i=[3+(i-j)+2k];
...

C语言毕竟不是数学,我们现阶段学习用到中括号仅仅在数组里有:

int i[15];

但是却还是有人将C语言的表达式和数学混为一谈,错误地使用中括号。

而且,还有一个致命错误是2k的出现。C语言不允许数字和变量之间没有运算符号。数学里常用的乘法书写法则在C语言里不适用。

代码修改:

...
	i=(3+(i-j)+2*k);
...

scanf的取地址问题

请读者找出下方代码错误。

...
	scanf("%d",i);
	return 0;
...

如果这个程序用codeblocks编译并运行,输入数值回车后会出现这种情况:

MzlSD1.png

而正常情况下是这样的:

MzlVvd.png

返回值不为0。

除此之外,有时候还会出现程序出错提示框。

i=0和i==0问题

请读者找出下面代码的错误。

...
	
	int i=0,j=3;
	if(i=0){
	    j++;
	}
	printf("%d %d",i,j);
...

执行后发现i0j3,完全达不到目的。

C语言初学者经常会被这些=,==等运算符搞得焦头烂额,以至于i=0是给i赋值0i==0才是等于号都忘记了。

修改后的代码:

...
	
	int i=0,j=3;
	if(i==0){
	    j++;
	}
	printf("%d %d",i,j);
...

执行结果:

Mz1DTP.png