序言
C 语言的最大特点是: 功能强, 使用方便灵活. C 编译的程序对语法检查并不象其它高级语言那么严格, 这就给编程人员留下 "灵活的余地". 但由于这个灵活给程序的调试带来了许多不便, 尤其对初学 C 语言的人来说, 经常会出一些连自己都不知道错在哪里的错误.
看着有错的程序, 不知该如何改起, 积累了一些 C 编程时常犯的错误, 写给各位小伙伴以供参考.
本文福利: C 语言 / C++ 交流群 967051845! 进群可免费获取 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. 输入字符的格式与要求不一致
在用 "%c" 格式输入字符时,"空格字符" 和 "转义字符" 都作为有效字符输入.
scanf("%c%c%c",&c1,&c2,&c3);
如输入 a b c
字符 "a" 送给 c1, 字符 "" 送给 c2, 字符"b" 送给 c3, 因为 %c 只要求读入一个字符, 后面不需要用空格作为两个字符的间隔.
7. 输入输出的数据类型与所用格式说明符不一致
例如, a 已定义为整型, b 定义为实型
- a=3;b=4.5;
- printf("%f%d\n",a,b);
编译时不给出出错信息, 但运行结果将与原意不符. 这种错误尤其需要注意.
8. 忽视了 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 语句则要执行一次循环体.
最后
互联网科技发展蓬勃兴起, 抓住风口. 为帮助那些往想互联网方向转行想学习, 却因为时间不够, 资源不足而放弃的人.
福利
本人自己学习 C 语言差不多有半年了! 从各种渠道整理出来下面这些感觉比较好的资料分享给大家!
获取方式: QQ 群: 967051845 进群即可免费领取!
资料
来源: http://www.jianshu.com/p/10193753c25c