Download presentation
Presentation is loading. Please wait.
1
簡易C++除錯技巧 長庚大學機械系
2
錯誤種類 編譯錯誤 cl /EHsc file.cpp 出現error 程式錯誤 程式可執行,但是出錯
3
1. 編譯錯誤 常見錯誤: 忘記 ";" 忘記定義 格式錯誤 除錯方法: 找尋錯誤行數,讀錯誤訊息,再更正。
4
舉例 test1.cpp(8) : error C2784: 'std::basic_istream<_Elem,_Traits> &std::operator >>(std::basic_istream<_Elem,_Traits> &,_Elem *)' : 無法由 '多載函式型別',針對 'std::basic_istream<_Elem,_Traits> &' 推算 <未知> 引數 D:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\istream(934) : 請參閱 'std::operator >>' 的宣告 test1.cpp(8) : error C2676: 二元運算子 '>>' : 'std::ostream' 沒有定義此運算子或預先定義運算子可接受的型別轉換 可能是: 第8行<< >>方向相法 cin >> cout <<
5
舉例 test1.cpp test1.cpp(7) : error C2146: 語法錯誤 : 遺漏 ';' (在識別項 'cin' 之前) 推測 少了";",在第7行之前,也就是第6行。
6
2. 程式錯誤 除錯方法 思想實驗:假設輸入值,跟著指令一行一行執行。 使用debug程式。 使用cout。
7
例題:求陣列最小值及下標 #include <iostream> using namespace std; int main() { double A[3][2]={1.8, 4.9, 6.8, 6.2, 2.1, 3.4}; int i,j,x,y; double Min; for (i=0;i<=2; i++) for (j=0;j<=3; j++) if (Min >= A[i][j]) { Min=A[i][j]; x=i; y=j; } cout<<"最大值"<<Min<<"下標"<<x<<","<<y<<endl; return 0; }
8
續 test.cpp e:\tmp\cpp\test.cpp(10) : warning C4700: 使用了未初始化的區域變數 'Min'
Microsoft (R) Incremental Linker Version Copyright (C) Microsoft Corporation. All rights reserved. /out:test.exe test.obj 增加Min=A[0][0], x=0, y=0 在for之前
9
續 #include <iostream> using namespace std; int main() { double A[3][2]={1.8, 4.9, 6.8, 6.2, 2.1, 3.4}; int i,j,x,y; double Min; Min=A[0][0]; x=0; y=0; for (i=1;i<=2; i++) for (j=1;j<=3; j++) { if (Min >= A[i][j]) Min=A[i][j]; x=i; y=j; } cout<<"最小值"<<Min<<"下標"<<x<<","<<y<<endl; system ("PAUSE"); return 0;
10
續 答案: 最小值 e-314下標2,3 →錯誤 →加cout
11
增加cout #include <iostream> using namespace std; int main() { double A[3][2]={1.8, 4.9, 6.8, 6.2, 2.1, 3.4}; int i,j,x,y; double Min; Min=A[0][0]; x=0; y=0; for (i=0;i<=2; i++) for (j=0;j<=3; j++) { cout << i << " "<< j << " " << A[i][j]<<endl; if (Min <= A[i][j]) Min=A[i][j]; x=i; y=j; cout << "inside if " <<i << " "<< j << " " << A[i][j] << endl; } cout<<"最小值"<<Min<<"下標"<<x<<","<<y<<endl; return 0;}
12
續 inside if → → → inside if e → 錯誤數字 inside if e-314 最小值 e-314下標2,3 →看出iteration錯誤
13
續 inside if inside if e-314 inside if e-314 最小值 e-314下標2,3
14
解 #include <iostream> using namespace std; int main() { double A[3][2]={1.8, 4.9, 6.8, 6.2, 2.1, 3.4}; int i,j,x,y; double Min; Min=A[0][0]; x=0; y=0; for (i=0;i<3; i++) for (j=0;j<2; j++) { if (Min <= A[i][j]) Min=A[i][j]; x=i; y=j; } cout<<"最小值"<<Min<<"下標"<<x<<","<<y<<endl; return 0;}
15
常見錯誤 if ( ); if 多加 ";" for ( ); for 多加 ";"
Similar presentations