首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言常见的程序异常

2012-02-19 
C语言常见的程序错误1、丢失分号每个C语句都必须以分号结尾。丢失分号可能引起编译器的混淆,导致“丢失”错误

C语言常见的程序错误
1、丢失分号  
每个C语句都必须以分号结尾。丢失分号可能引起编译器的混淆,导致“丢失”错误消息。请看下面语句:  
a   =   x   +   y  
b   =   m/n;  
编译器将把第二行作为第一行的一部分,把b看作是一个变量。因而得到在第二行的“未定义变量名”错误消息。注意,消息和位置都是不正确的。在这种情况下,所报告的行没有错误,就应检查前一行是否丢失了分号。还有就是当丢失分号时,可能导致编译器“疯狂”运行,产生一系列的错误消息。如果发现这种可疑错误,在错误列表的开始处检查是否丢失了分号。  
2、误用分号  
请看下面代码:  
for   (   i   =   1;   i   <=   10;   i   ++   );  
sum   =   sum   +   i;  
该代码用于把1-10的所有整数加起来。但实际结果是只有i的最后“退出”值加到了sum上。这种错误的其他一些情况有:  
(1)while   (   x   <   max   );  
{  
....  
}  
(2)if   (   T   > =   2000   );  
grade   =   'A ';单个分号表示的是空语句,因此语法上是合法的。编译器不会产生任何错误消息。可见,这种错误比语法错误更糟糕。  
该用   ==   而误用   =  
当要执行一个关系测试时,很可能忘了使用双等号。例如:  
if   (   code   =   1)  
count   ++;  
这句语句在语法上是合法的。变量code被赋值1,然后,因为code   =   1为真,因而count递增。实际上,上面代码不会对code做任何关系测试。不论code的值如何,总是会运行count   ++语句。  
在其他控制语句(如for和while)中,可能发生类似的错误。在循环控制语句中的这种错误可能会导致无限循环。  
3、丢失括号  
在编写深度嵌套的循环时,往往会忘了加闭括号。这往往能被编译器检测到,因为开括号的数目应与闭括号的匹配。但是,如果把匹配的括号放在了错误的地方,编译器不能发现这种错误,程序将产生不可预知的结果。  
括号的另一个严重的问题是,当多个语句要组合在一起时,没有使用括号。例如,请看以下语句:  
for   (   i   =   1;   i   <=   10;   i   ++)  
sum1   =   sum1   +   i;  
sum2   =   sum2   +   i*i;  
printf( "%d   %d ",sum1,sum2);  
上面代码本意是计算从1   -   10、步长为1的sum1和sum2,然后显示其值。但实际上for循环只是把第一个语句作为其循环体,即:  
sum1   =   sum1   +   i;  
因此,语句  
sum2   =   sum2   +   i*i;  
只是在循环退出时计算了一次。这个代码段的正确编写方法是如下添加括号:  
for   (   i   =   1;   i   <=   10;   i   ++)  
{  
sum1   =   sum1   +   i;  
sum2   =   sum2   +   i*i;  
}  

printf( "%d   %d ",sum1,sum2);  
如果只有一个括号,那结果将是不可预知的。  
4、丢失引号  
每个字符串都必须用双引号扩起来,而单个字符常量则用单引号。如果遗漏了引号,那么字符串或者字符将被当作一个变量。例如:  
if   (   response   ==   YES)  
Grade   =   A;  
这里YES和A都被看作为变量,因此会出现“为定义变量名”的错误消息。  
5、误用引号  
只要处理单个字符,就可能使用单引号。应小心确保有关的变量已经正确声明了。例如,如果city已经声明为char类型变量,那么下面语句  
city   =   'M ';  
是不合法的。


转http://bbs.csai.cn/bbs/view.asp?Id={05EC68A6-EC51-41B9-B057-893ADA7DA5A2}

[解决办法]
mark
[解决办法]
嗯?
[解决办法]
mark
[解决办法]
真的不錯 收藏 tks, lz

[解决办法]
mark

热点排行