【例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。