本人通过对C
![](/icons/23903de.gif)
学习
![](/icons/23903dou.gif)
积累了
![](/icons/23903yi.gif)
些C编程时常犯
![](/icons/23903de.gif)
![](/icons/23903cuowu.gif)
![](/icons/23903dou.gif)
写给各位学员以供参考
1.书写标识符时
![](/icons/23903dou.gif)
忽略了大小写字母
![](/icons/23903de.gif)
区别
![](/icons/23903main.gif)
()
{
![](/icons/23903int.gif)
a=5;pr
![](/icons/23903int.gif)
f("%d"
![](/icons/23903dou.gif)
A);}编译
![](/icons/23903chengxu.gif)
把a和A认为是两个区别
![](/icons/23903de.gif)
变量名
![](/icons/23903dou.gif)
而显示出错信息
![](/icons/23903dou2.gif)
C认为大写字母和小写字母是两个区别
![](/icons/23903de.gif)
![](/icons/23903zifu.gif)
![](/icons/23903dou2.gif)
习惯上
![](/icons/23903dou.gif)
符号常量名用大写
![](/icons/23903dou.gif)
变量名用小写表示
![](/icons/23903dou.gif)
以增加可读性
2.忽略了变量
![](/icons/23903de.gif)
类型
![](/icons/23903dou.gif)
进行了不合法
![](/icons/23903de.gif)
运算
![](/icons/23903main.gif)
()
{ float a
![](/icons/23903dou.gif)
b;pr
![](/icons/23903int.gif)
f("%d"
![](/icons/23903dou.gif)
a%b);} %是求余运算
![](/icons/23903dou.gif)
得到a/b
![](/icons/23903de.gif)
整余数
![](/icons/23903dou2.gif)
整型变量a和b可以进行求余运算
![](/icons/23903dou.gif)
而实型变量则不允许进行“求余”运算
3.将
![](/icons/23903zifu.gif)
常量和
![](/icons/23903zifu.gif)
串常量混淆
char c;c="a";在这里就混淆了
![](/icons/23903zifu.gif)
常量和
![](/icons/23903zifu.gif)
串常量
![](/icons/23903dou.gif)
![](/icons/23903zifu.gif)
常量是由
![](/icons/23903yi.gif)
对单引号括起来
![](/icons/23903de.gif)
单个
![](/icons/23903zifu.gif)
![](/icons/23903dou.gif)
![](/icons/23903zifu.gif)
串常量是
![](/icons/23903yi.gif)
对双引号括起来
![](/icons/23903de.gif)
![](/icons/23903zifu.gif)
序列
![](/icons/23903dou2.gif)
C规定以“\”作
![](/icons/23903zifu.gif)
串结束标志
![](/icons/23903dou.gif)
它是由系统自动加上
![](/icons/23903de.gif)
![](/icons/23903dou.gif)
所以
![](/icons/23903zifu.gif)
串“a”实际上包含两个
![](/icons/23903zifu.gif)
:“a'和‘\'
![](/icons/23903dou.gif)
而把它赋给
![](/icons/23903yi.gif)
个
![](/icons/23903zifu.gif)
变量是不行
![](/icons/23903de.gif)
4.忽略了“=”和“
![](/icons/23903dd.gif)
”
![](/icons/23903de.gif)
区别
在许多高级语言中
![](/icons/23903dou.gif)
用“=”符号作为关系运算符“等于”
![](/icons/23903dou2.gif)
如在BASIC
![](/icons/23903chengxu.gif)
中可以写
![](/icons/23903if.gif)
(a=3) then …
但C语言中
![](/icons/23903dou.gif)
“=”是赋值运算符
![](/icons/23903dou.gif)
“
![](/icons/23903dd.gif)
”是关系运算符
![](/icons/23903dou2.gif)
如:
![](/icons/23903if.gif)
(a
![](/icons/23903dd.gif)
3) a=b;前者是进行比较
![](/icons/23903dou.gif)
a是否和3相等
![](/icons/23903dou.gif)
后者表示如果a和3相等
![](/icons/23903dou.gif)
把b值赋给a.由于习惯问题
![](/icons/23903dou.gif)
初学者往往会犯这样
![](/icons/23903de.gif)
![](/icons/23903cuowu.gif)
5.忘记加分号
分号是C语句中不可缺少
![](/icons/23903de.gif)
![](/icons/23903yi.gif)
部分
![](/icons/23903dou.gif)
语句末尾必须有分号
a=1 b=2编译时
![](/icons/23903dou.gif)
编译
![](/icons/23903chengxu.gif)
在“a=1”后面没发现分号
![](/icons/23903dou.gif)
就把下
![](/icons/23903yi.gif)
行“b=2”也作为上
![](/icons/23903yi.gif)
行语句
![](/icons/23903de.gif)
![](/icons/23903yi.gif)
部分
![](/icons/23903dou.gif)
这就会出现语法
![](/icons/23903cuowu.gif)
![](/icons/23903dou2.gif)
改错时
![](/icons/23903dou.gif)
有时在被指出有错
![](/icons/23903de.gif)
![](/icons/23903yi.gif)
行中未发现
![](/icons/23903cuowu.gif)
![](/icons/23903dou.gif)
就需要看
![](/icons/23903yi.gif)
下上
![](/icons/23903yi.gif)
行是否漏掉了分号
{ z=x+y;t=z/100;pr
![](/icons/23903int.gif)
f("%f"
![](/icons/23903dou.gif)
t);}对于复合语句来说
![](/icons/23903dou.gif)
最后
![](/icons/23903yi.gif)
个语句中最后
![](/icons/23903de.gif)
分号不能忽略不写(这是和PASCAL区别
![](/icons/23903de.gif)
)
6.多加分号
对于
![](/icons/23903yi.gif)
个复合语句
![](/icons/23903dou.gif)
如:
{ z=x+y;t=z/100;pr
![](/icons/23903int.gif)
f("%f"
![](/icons/23903dou.gif)
t);};复合语句
![](/icons/23903de.gif)
花括号后不应再加分号
![](/icons/23903dou.gif)
否则将会画蛇添足
又如:
![](/icons/23903if.gif)
(a%3
![](/icons/23903dd.gif)
0);I
![](/icons/23903jiajia.gif)
;本是如果3整除a
![](/icons/23903dou.gif)
则I加1.但由于
![](/icons/23903if.gif)
(a%3
![](/icons/23903dd.gif)
0)后多加了分号
![](/icons/23903dou.gif)
则
![](/icons/23903if.gif)
语句到此结束
![](/icons/23903dou.gif)
![](/icons/23903chengxu.gif)
将执行I
![](/icons/23903jiajia.gif)
语句
![](/icons/23903dou.gif)
不论3是否整除a
![](/icons/23903dou.gif)
I都将自动加1.
再如:
for (I=0;I
本意是先后输入5个数
![](/icons/23903dou.gif)
每输入
![](/icons/23903yi.gif)
个数后再将它输出
![](/icons/23903dou2.gif)
由于for()后多加了
![](/icons/23903yi.gif)
个分号
![](/icons/23903dou.gif)
使循环体变为空语句
![](/icons/23903dou.gif)
此时只能输入
![](/icons/23903yi.gif)
个数并输出它
7.输入变量时忘记加地址运算符“&”
![](/icons/23903int.gif)
a
![](/icons/23903dou.gif)
b;scanf("%d%d"
![](/icons/23903dou.gif)
a
![](/icons/23903dou.gif)
b);这是不合法
![](/icons/23903de.gif)
![](/icons/23903dou2.gif)
Scanf
![](/icons/23903hanshu.gif)
![](/icons/23903de.gif)
作用是:按照a、b在内存
![](/icons/23903de.gif)
地址将a、b
![](/icons/23903de.gif)
值存进去
![](/icons/23903dou2.gif)
“&a”指a在内存中
![](/icons/23903de.gif)
地址
8.输入数据
![](/icons/23903de.gif)
方式和要求不符
①scanf("%d%d"
![](/icons/23903dou.gif)
&a
![](/icons/23903dou.gif)
&b);
输入时
![](/icons/23903dou.gif)
不能用逗号作两个数据间
![](/icons/23903de.gif)
分隔符
![](/icons/23903dou.gif)
如下面输入不合法:
3
![](/icons/23903dou.gif)
4
输入数据时
![](/icons/23903dou.gif)
在两个数据的间以
![](/icons/23903yi.gif)
个或多个空格间隔
![](/icons/23903dou.gif)
也可用回车键
![](/icons/23903dou.gif)
跳格键tab.
②scanf("%d
![](/icons/23903dou.gif)
%d"
![](/icons/23903dou.gif)
&a
![](/icons/23903dou.gif)
&b);
C规定:如果在“格式控制”
![](/icons/23903zifu.gif)
串中除了格式介绍说明以外还有其它
![](/icons/23903zifu.gif)
![](/icons/23903dou.gif)
则在输入数据时应输入和这些
![](/icons/23903zifu.gif)
相同
![](/icons/23903de.gif)
![](/icons/23903zifu.gif)
![](/icons/23903dou2.gif)
下面输入是合法
![](/icons/23903de.gif)
:
3
![](/icons/23903dou.gif)
4
此时不用逗号而用空格或其它
![](/icons/23903zifu.gif)
是不对
![](/icons/23903de.gif)
3 4 3:4
又如:
scanf("a=%d
![](/icons/23903dou.gif)
b=%d"
![](/icons/23903dou.gif)
&a
![](/icons/23903dou.gif)
&b);输入应如以下形式:
a=3
![](/icons/23903dou.gif)
b=4
9.输入
![](/icons/23903zifu.gif)
![](/icons/23903de.gif)
格式和要求不
![](/icons/23903yi.gif)
致
在用“%c”格式输入
![](/icons/23903zifu.gif)
时
![](/icons/23903dou.gif)
“空格
![](/icons/23903zifu.gif)
”和“转义
![](/icons/23903zifu.gif)
”都作为有效
![](/icons/23903zifu.gif)
输入
scanf("%c%c%c"
![](/icons/23903dou.gif)
&c1
![](/icons/23903dou.gif)
&c2
![](/icons/23903dou.gif)
&c3);
如输入a b c
![](/icons/23903zifu.gif)
“a”送给c1
![](/icons/23903dou.gif)
![](/icons/23903zifu.gif)
“ ”送给c2
![](/icons/23903dou.gif)
![](/icons/23903zifu.gif)
“b”送给c3
![](/icons/23903dou.gif)
![](/icons/23903yinwei.gif)
%c只要求读入
![](/icons/23903yi.gif)
个
![](/icons/23903zifu.gif)
![](/icons/23903dou.gif)
后面不需要用空格作为两个
![](/icons/23903zifu.gif)
![](/icons/23903de.gif)
间隔
10.输入输出
![](/icons/23903de.gif)
数据类型和所用格式介绍说明符不
![](/icons/23903yi.gif)
致
例如
![](/icons/23903dou.gif)
a已定义为整型
![](/icons/23903dou.gif)
b定义为实型
a=3;b=4.5;pr
![](/icons/23903int.gif)
f("%f%d\n"
![](/icons/23903dou.gif)
a
![](/icons/23903dou.gif)
b);编译时不给出出错信息
![](/icons/23903dou.gif)
但运行结果将和原意不符
![](/icons/23903dou2.gif)
这种
![](/icons/23903cuowu.gif)
尤其需要注意
11.输入数据时
![](/icons/23903dou.gif)
企图规定精度
scanf("%7.2f"
![](/icons/23903dou.gif)
&a);这样做是不合法
![](/icons/23903de.gif)
![](/icons/23903dou.gif)
输入数据时不能规定精度
12.switch语句中漏写
![](/icons/23903break.gif)
语句
例如:根据考试成绩
![](/icons/23903de.gif)
等级打印出百分制数段
switch(grade)
{
![](/icons/23903case.gif)
'A':pr
![](/icons/23903int.gif)
f("85~100\n");
![](/icons/23903case.gif)
'B':pr
![](/icons/23903int.gif)
f("70~84\n");
![](/icons/23903case.gif)
'C':pr
![](/icons/23903int.gif)
f("60~69\n");
![](/icons/23903case.gif)
'D':pr
![](/icons/23903int.gif)
f("由于漏写了
![](/icons/23903break.gif)
语句
![](/icons/23903dou.gif)
![](/icons/23903case.gif)
只起标号
![](/icons/23903de.gif)
作用
![](/icons/23903dou.gif)
而不起判断作用
![](/icons/23903dou2.gif)
因此
![](/icons/23903dou.gif)
当grade值为A时
![](/icons/23903dou.gif)
pr
![](/icons/23903int.gif)
f
![](/icons/23903hanshu.gif)
在执行完第
![](/icons/23903yi.gif)
个语句后接着执行第 2、 3、 4、 5个pr
![](/icons/23903int.gif)
f
![](/icons/23903hanshu.gif)
语句
![](/icons/23903dou2.gif)
正确写法应在每个分支后再加上“
![](/icons/23903break.gif)
;”
![](/icons/23903dou2.gif)
例如
![](/icons/23903case.gif)
'A':pr
![](/icons/23903int.gif)
f("85~100\n");
![](/icons/23903break.gif)
;13.忽视了while和do-while语句在细节上
![](/icons/23903de.gif)
区别
(1)
![](/icons/23903main.gif)
()
{
![](/icons/23903int.gif)
a=0
![](/icons/23903dou.gif)
I;scanf("%d"
![](/icons/23903dou.gif)
&I);while(I(2)
![](/icons/23903main.gif)
()
{
![](/icons/23903int.gif)
a=0
![](/icons/23903dou.gif)
I;scanf("%d"
![](/icons/23903dou.gif)
&I);do {a=a+I;I
![](/icons/23903jiajia.gif)
;}while(I可以看到
![](/icons/23903dou.gif)
当输入I
![](/icons/23903de.gif)
值小于或等于10时
![](/icons/23903dou.gif)
2者得到
![](/icons/23903de.gif)
结果相同
![](/icons/23903dou2.gif)
而当I>10时
![](/icons/23903dou.gif)
2者结果就区别了
![](/icons/23903dou2.gif)
![](/icons/23903yinwei.gif)
while循环是先判断后执行
![](/icons/23903dou.gif)
而do-while循环是先执行后判断
![](/icons/23903dou2.gif)
对于大于10
![](/icons/23903de.gif)
数while循环
![](/icons/23903yi.gif)
次也不执行循环体
![](/icons/23903dou.gif)
而do-while语句则要执行
![](/icons/23903yi.gif)
次循环体
14.定义
![](/icons/23903shuzu.gif)
时误用变量
![](/icons/23903int.gif)
n;scanf("%d"
![](/icons/23903dou.gif)
&n);
![](/icons/23903int.gif)
a[n];
![](/icons/23903shuzu.gif)
名后用方括号括起来
![](/icons/23903de.gif)
是常量表达式
![](/icons/23903dou.gif)
可以包括常量和符号常量
![](/icons/23903dou2.gif)
即C不允许对
![](/icons/23903shuzu.gif)
![](/icons/23903de.gif)
大小作动态定义
15.在定义
![](/icons/23903shuzu.gif)
时
![](/icons/23903dou.gif)
将定义
![](/icons/23903de.gif)
“元素个数”误认为是可使
![](/icons/23903de.gif)
最大下标值
![](/icons/23903main.gif)
()
{
![](/icons/23903int.gif)
a[10]={1
![](/icons/23903dou.gif)
2
![](/icons/23903dou.gif)
3
![](/icons/23903dou.gif)
4
![](/icons/23903dou.gif)
5
![](/icons/23903dou.gif)
6
![](/icons/23903dou.gif)
7
![](/icons/23903dou.gif)
8
![](/icons/23903dou.gif)
9
![](/icons/23903dou.gif)
10};pr
![](/icons/23903int.gif)
f("%d"
![](/icons/23903dou.gif)
a[10]);} C语言规定:定义时用a[10]
![](/icons/23903dou.gif)
表示a
![](/icons/23903shuzu.gif)
有10个元素
![](/icons/23903dou2.gif)
其下标值由0开始
![](/icons/23903dou.gif)
所以
![](/icons/23903shuzu.gif)
元素a[10]是不存在
![](/icons/23903de.gif)
16.
![](/icons/23903chushi.gif)
化
![](/icons/23903shuzu.gif)
时
![](/icons/23903dou.gif)
未使用静态存储
![](/icons/23903int.gif)
a[3]={0
![](/icons/23903dou.gif)
1
![](/icons/23903dou.gif)
2};这样
![](/icons/23903chushi.gif)
化
![](/icons/23903shuzu.gif)
是不对
![](/icons/23903de.gif)
![](/icons/23903dou2.gif)
C语言规定只有静态存储(
![](/icons/23903static.gif)
)
![](/icons/23903shuzu.gif)
和外部存储(exterm)
![](/icons/23903shuzu.gif)
才能
![](/icons/23903chushi.gif)
化
![](/icons/23903dou2.gif)
应改为:
![](/icons/23903int.gif)
a[3]={0
![](/icons/23903dou.gif)
1
![](/icons/23903dou.gif)
2};17.在不应加地址运算符&
![](/icons/23903de.gif)
位置加了地址运算符
scanf("%s"
![](/icons/23903dou.gif)
&str);C语言编译系统对
![](/icons/23903shuzu.gif)
名
![](/icons/23903de.gif)
处理是:
![](/icons/23903shuzu.gif)
名代表该
![](/icons/23903shuzu.gif)
![](/icons/23903de.gif)
起始地址
![](/icons/23903dou.gif)
且scanf
![](/icons/23903hanshu.gif)
中
![](/icons/23903de.gif)
输入项是
![](/icons/23903zifu.gif)
![](/icons/23903shuzu.gif)
名
![](/icons/23903dou.gif)
不必要再加地址符&.应改为:
scanf("%s"
![](/icons/23903dou.gif)
str);18.同时定义了形参和
![](/icons/23903hanshu.gif)
中
![](/icons/23903de.gif)
局部变量
![](/icons/23903int.gif)
max(x
![](/icons/23903dou.gif)
y)
![](/icons/23903int.gif)
x
![](/icons/23903dou.gif)
y
![](/icons/23903dou.gif)
z;{ z=x>y?x:y;
![](/icons/23903return.gif)
(z);}形参应该在
![](/icons/23903hanshu.gif)
体外定义
![](/icons/23903dou.gif)
而局部变量应该在
![](/icons/23903hanshu.gif)
体内定义
![](/icons/23903dou2.gif)
应改为:
![](/icons/23903int.gif)
max(x
![](/icons/23903dou.gif)
y)
![](/icons/23903int.gif)
x
![](/icons/23903dou.gif)
y;{
![](/icons/23903int.gif)
z;z=x>y?x:y;
![](/icons/23903return.gif)
(z);}
延伸阅读
最新评论