a=3 b= 4 编译时,编译程序在a=3后面未发现分号,就把下一行 b=4也作为上一行的语句的一部分,这样就会出现语法错 误。有时编译时指出某行有错,但在该行上并未发现错误, 就应该检查上一行是否漏了分号。
14
(5) 输入输出的数据的类型与所用格式说明符不一致。 例如,若a 已定义为整型, b已定义为实型。 a=3 ; b=4.5 ; printf(" %f %d\n " , a , b) ; 编译时不给出出错信息,但运行结果将与原意不符,输 出为
9
13.2 常见错误分析
下面列举出初学者易犯的错误,以提醒读者注意。 (1) 误把“=”作为“等于”比较符。 C 语言中, “=” 是赋值运算符, “==” 才是关系运算 符“等于”。如果写成 if(a = b) printf("a equal to b") ;
10
C编译程序会将(a=b)作为赋值表达式处理,将b的值 赋给a ,然后判断a的值是否为0,若为非0,则作为“真”; 若为0,则作为“假”。如果a 的值为3 ,b的值为4 ,a≠b , 按原意不应输出“a equal to b”。而现在先将b的值赋给a, a也为4,赋值表达式的值为4 。if语句中的表达式值为“真 ”(非0),因此输出“a equal to b”。
3
2. 上机调试,即动态检查 在人工(静态)检查无误后,才可以上机调试。通过上 机发现的错误称之为动态检查。在编译时,系统会给出语 法错误的信息(包括哪一行有错以及错误类型),用户可以 根据提示的信息具体找出程序中出错之处并进行修改。应 当注意的是:有时提示的出错行并不是真正出错的行,如 果在提示出错的行上找不到错误的话,应当到上一行再找。 另外,有时提示出错的类型并非绝对准确,由于出错的情 况繁多而且各种错误互有关联,因此要善于分析,找出真 正的错误,而不要死抱住提示的出错信息不放,钻牛角尖。