学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;I<5;I++);

{scanf("%d",&x);

printf("%d",x);}

本意是先后输入5个数,每输入一个数后再将它输出.由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它.

又如:

输入变量时忘记加地址运算符"&".

int a,b;

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

这是不合法的.Scanf函数的作用是:按照a,b在内存的地址将a,b的值存进去."&a"指a在内存中的地址.

7.输入数据的方式与要求不符.

①scanf("%d%d",&a,&b);

输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:

3,4

输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab.

②scanf("%d,%d",&a,&b);

8.C规定:如果在"格式控制"字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符.下面输入是合法的:

3,4

此时不用逗号而用空格或其它字符是不对的.

3 4 3:4

又如:

scanf("a=%d,b=%d",&a,&b);

输入应如以下形式:

a=3,b=4

9.输入字符的格式与要求不一致.

在用"%c"格式输入字符时,"空格字符"和"转义字符"都作为有效字符输入.

scanf("%c%c%c",&c1,&c2,&c3);

如输入a b c

字符"a"送给c1,字符" "送给c2,字符"b"送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔.

10.输入输出的数据类型与所用格式说明符不一致.

例如,a已定义为整型,b定义为实型

a=3;b=4.5;

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

编译时不给出出错信息,但运行结果将与原意不符.这种错误尤其需要注意.

11.输入数据时,企图规定精度.

scanf("%7.2f",&a);

这样做是不合法的,输入数据时不能规定精度.

12.switch语句中漏写break语句.

例如:根据考试成绩的等级打印出百分制数段.

switch(grade)

{ case ‘A‘:printf("85~100 ");

case ‘B‘:printf("70~84 ");

case ‘C‘:printf("60~69 ");

case ‘D‘:printf("<60 ");

default:printf("error ");

由于漏写了break语句,case只起标号的作用,而不起判断作用.因此,当grade值为A时,printf函数在执行完第一个语句后接着执行第二,三,四,五个printf函数语句.正确写法应在每个分支后再加上"break;".

例如

case ‘A‘:printf("85~100 ");break;

13.忽视了while和do-while语句在细节上的区别.

(1)main()

{int a=0,I;

scanf("%d",&I);

while(I<=10)

{a=a+I;

I++;

}

printf("%d",a);

}

(2)main()

{int a=0,I;

scanf("%d",&I);

do

{a=a+I;

I++;

}while(I<=10);

printf("%d",a);

}

可以看到,当输入I的值小于或等于10时,二者得到的结果相同.而当I>10时,二者结果就不同了.因为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);

}

原文地址:http://blog.51cto.com/13726362/2109188

时间: 2024-11-10 12:52:56

学C语言编程初学者,容易常出的错误的相关文章

C语言编程时常犯十八个错误

C语言的最大特点是:功能强.使用方便灵活.C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下"灵活的余地",但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误.看着有错的程序,不知该如何改起,本人通过对C的学习,积累了一些C编程时常犯的错误,写给各位学员以供参考.1.书写标识符时,忽略了大小写字母的区别.main(){ int a=5; printf("%d",A);}编译程序把a和A认

《Go语言编程》书中另外一处错误

<Go语言编程>一书中[2.4.1 条件语句]有一处错误,应当是书中使用Go语言版本低于1.1版所致,原文如下: 在有返回值的函数中,不允许将"最终的" return语句包含在if...else... 结构中,否则会编译失败:function ends without a return statement.失败的原因在于, Go编译器无法找到终止该函数的return语句.编译失败的案例如下:func example(x int) int {    if x == 0 { 

初学C语言编程时最容易犯的错误,你踩坑了吗?

C编译的程序对语法检查并不像其它高级语言那么严格,这就给编程人员留下"灵活的余地",但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误.看着有错的程序,不知该如何改起,通过对C的学习,积累了一些C编程时常犯的错误,以供参考. 1.书写标识符时,忽略了大小写字母的区别 main() {  int a=5;  printf("%d",A); } 编译程序把a和A认为是两个不同的变量名,而显示出错信息.C认为大

《编程初学者学什么语言好》读后感

编程语言种类数不胜数,作为一个编程初学者还真是不知道学什么好.学校要求先学习基本的C语言,可是我觉得好难不好学,基本的学不好我也很苦恼.再加上本身就不会自主学习,花在学习上的时间也是少之又少.后来阅读了<我是一只IT小小鸟>也发现不能什么都学,应该专注学习一门语言,而且还要学得精.后来老师推荐我学习Python,我了解了一下确实语法和库更丰富,上手更容易,使用更方便.读了这篇文章之后更加坚定了我要学习Python的决心. 不过也了解到学习C语言的重要性,简单直接而且基础,今天很认真的打了一大串

跟着数百万人编程导师学C语言!

点击关注 异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书 --异步小编 为什么说这不是一本完全C语言的书?因为<"笨办法"学C语言>不仅仅是一本书,随书附赠5个多小时充满激情的视频,这是一套完整的C语言视频课程! 这本书刚拿到样书,运营经理兴奋的发来消息:"手机扫码看视频,太方便了,速度也很快,配的字幕也很赞!"而本书的责编杨海玲老师很淡定:"这个是我尝试的第一本扫码看视频的书,虽然遇到些问

编程初步————学渣再学C语言之路

内存: 程序在执行时,程序的指令和数据都必须存储到主内存中,也可以说存在RAM(随机访问存储器)中,RAM是易失性存储器,PC关闭,RAM内容丢失: 变量是什么? 变量就是计算机的一块特定的内存,有一个或多个连续的字节组成,当然每个变量都会有一个名字叫变量名,就像一个ID,一个身份证号码,这个变量名独一无二的代表着这块内存空间,编译器就可以通过这个ID来直接调用这块内存里存储的数据了,这也很好的解释了变量名不占内存空间,编译器直接就把他翻译成了数据: 变量的声明其实也可以称为变量的定义,按照声明

给PHP扩展/C语言/网络编程初学者推荐的几本书

Linux/Unix系统 深入理解计算机系统 UNIX环境高级编程 深入理解Linux内核 网络通信编程 UNIX网络编程 TCP/IP详解 Linux多线程服务端编程 数据结构与算法 算法导论 <数据结构>(C语言版) C程序设计语言 给PHP扩展/C语言/网络编程初学者推荐的几本书

linux 操作系统下c语言编程入门

2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 7)Linux程序设计入门--线程操作 8)Linux程序设计入门--网络编程 9)Linux下C开发工具介绍 1)Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编

R语言编程中的常见错误

R语言编程中的常见错误有一些错误是R的初学者和经验丰富的R程序员都可能常犯的.如果程序出错了,请检查以下几方面.? 使用了错误的大小写.help().Help()和HELP()是三个不同的函数(只有第一个是正确的).? 忘记使用必要的引号.install.packages("gclus")能够正常执行,然而Install.packages(gclus)将会报错.? 在函数调用时忘记使用括号.例如,要使用help()而非help.即使函数无需参数,仍需加上().? 在Windows上,路