1.9 记住我就会受益无穷

【例1.6】分析下面程序存在的错误。


#include <stdio.h>
void main
()
{
;
     printf
("
输入x
:"
);
     double x
;
     scanf
("%Lf"
,x
); 
     printf
("
输出x
:%f\n"
,x
);
  

首先可以借助编译器查错。编译后给出如下错误信息。


error C2143
: syntax error 
: missing '
;' before 'type'
error C2065
: 'x' 
: undeclared identifier
fatal error C1004
: unexpected end of file found
  

注意3条提示只是参考,并不准确,例如主程序“{”处多了“;”号,这就无法判断,所以最后的确认还需要自己分析。

第1条信息定位于double语句,错误信息就不准确了,但可以判断出是声明变量的位置错误,应该把x的声明提到最前面。第2条信息定位于scanf语句,错误信息说没有声明变量x,其实是声明的位置不对,只要改正了前一个错误语句,这条错误信息就没有了。第3条信息很准确,文件没有结束,少了一个“}”号。由此可见,在排错时,如果错误信息很多,可以先改有把握的,然后再编译看看,不要按错误信息的顺序埋头苦干,有时改正一个错误,会消除很多错误信息。

下面根据一个实际程序,用注释方式给出基本程序构成格式,记住它可以避免很多错误,达到事半功倍的效果。

【例1.7】基本程序构成格式示例。


#include <stdio.h>               //  
预编译语句,注意尾部没有“;”号
void main
( 
)               // 
主程序,别忘记是圆括号( 
)
{                         // 
主程序开始
      double x
;               // 
变量声明在最前面
      printf
("
输入x
:"
);          // 
程序语句用“;”号结束 
      scanf
("%Lf"
,&x
);          // 
在scanf
语句中,基本变量前面一定要加&
号
      printf
("
输出x
:%f\n"
,x
);     // 
程序语句用“;”号结束
}                         //
主程序结束
  

【例1.8】对照给出的结构,分析下面程序的错误。


 #include <stdio.h>               //
预编译
 #define MAX 9.5
;
 #define MIN 1.5
;
 #define SUB MAX-MIN
;
 void main
( 
)              
 {                         //
主程序开始
     double answer= SUB
;
     printf
("
差=%f\n"
,answe
); 
 }                         //
主程序结束
  

对照给出的规范:预编译语句,尾部不能有“;”号,可知本程序3条#define宏定义语句多了分号。另外,printf中的answer少了字母r。

《C语言解惑》