Presentation is loading. Please wait.

Presentation is loading. Please wait.

簡易C++除錯技巧 長庚大學機械系 101.5.17.

Similar presentations


Presentation on theme: "簡易C++除錯技巧 長庚大學機械系 101.5.17."— Presentation transcript:

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 多加 ";"


Download ppt "簡易C++除錯技巧 長庚大學機械系 101.5.17."

Similar presentations


Ads by Google