1、簡易C+除錯技巧,長庚大學機械系101.5.17,錯誤種類,編譯錯誤cl /EHsc file.cpp出現error程式錯誤程式可執行,但是出錯,1. 編譯錯誤,常見錯誤:忘記 ;忘記定義格式錯誤除錯方法:找尋錯誤行數,讀錯誤訊息,再更正。,舉例,test1.cpp(8) : error C2784: std:basic_istream &std:operator (std:basic_istream &,_Elem *) : 無法由 多載函式型別,針對 std:basic_istream & 推算 引數 D:Program FilesMicrosoft Visual Studio 9.0VC
2、INCLUDEistream(934) : 請參閱 std:operator 的宣告test1.cpp(8) : error C2784: std:basic_istream &std:operator (std:basic_istream &,_Elem *) : 無法由 多載函式型別,針對 std:basic_istream & 推算 引數 D:Program FilesMicrosoft Visual Studio 9.0VCINCLUDEistream(934) : 請參閱 std:operator 的宣告test1.cpp(8) : error C2676: 二元運算子 : std:
3、ostream 沒有定義此運算子或預先定義運算子可接受的型別轉換可能是: 第8行方向相法cin cout ,舉例,test1.cpptest1.cpp(7) : error C2146: 語法錯誤 : 遺漏 ; (在識別項 cin 之前)推測少了;,在第7行之前,也就是第6行。,2. 程式錯誤,除錯方法思想實驗:假設輸入值,跟著指令一行一行執行。使用debug程式。使用cout。,例題:求陣列最小值及下標,#include using namespace std;int main()double A32=1.8, 4.9, 6.8, 6.2, 2.1, 3.4;int i,j,x,y;doub
4、le Min;for (i=0;i= Aij) Min=Aij; x=i; y=j; cout最大值Min下標x,yendl;return 0;,續,test.cppe:tmpcpptest.cpp(10) : warning C4700: 使用了未初始化的區域變數 MinMicrosoft (R) Incremental Linker Version 9.00.30729.01Copyright (C) Microsoft Corporation. All rights reserved./out:test.exe test.obj 增加Min=A00, x=0, y=0 在for之前,續,
5、#include using namespace std;int main()double A32=1.8, 4.9, 6.8, 6.2, 2.1, 3.4;int i,j,x,y;double Min;Min=A00;x=0;y=0;,for (i=1;i= Aij) Min=Aij; x=i; y=j; cout最小值Min下標x,yendl;system (PAUSE);return 0;,續,答案:最小值4.24612e-314下標2,3錯誤加cout,增加cout,#include using namespace std;int main()double A32=1.8, 4.9,
6、6.8, 6.2, 2.1, 3.4;int i,j,x,y;double Min;Min=A00;x=0;y=0;,for (i=0;i=2; i+) for (j=0;j=3; j+)cout i j Aijendl; if (Min = Aij) Min=Aij; x=i; y=j; cout inside if i j Aij endl; cout最小值Min下標x,yendl;return 0;,續,0 0 1.8inside if 0 0 1.80 1 4.90 2 6.80 3 6.2 1 0 6.8 1 1 6.21 2 2.11 3 3.42 0 2.1 2 1 3.42 2
7、 1.8,inside if 2 2 1.82 3 4.24612e-314 錯誤數字inside if 2 3 4.24612e-314最小值4.24612e-314下標2,3看出iteration錯誤,續,0 0 1.8inside if 0 0 1.80 1 4.90 2 6.80 3 6.21 0 6.81 1 6.21 2 2.11 3 3.42 0 2.12 1 3.42 2 1.8,inside if 2 2 1.82 3 4.24612e-314inside if 2 3 4.24612e-314最小值4.24612e-314下標2,3,解,#include using namespace std;int main()double A32=1.8, 4.9, 6.8, 6.2, 2.1, 3.4;int i,j,x,y;double Min;Min=A00;x=0;y=0;,for (i=0;i3; i+) for (j=0;j2; j+) if (Min = Aij) Min=Aij; x=i; y=j; cout最小值Min下標x,yendl;return 0;,常見錯誤,if ( ); if 多加 ;for ( ); for 多加 ;,