天天看點

2014秋C++第5周項目1參考-見識初學者常見錯誤

【項目1】下面是最經典和最簡單的c++程式。在ideone.com中運作程式,并在能正确運作的程式基礎上,“搗亂”制造些錯誤,對此進行觀察。經驗是從錯誤中得來的,這個項目就是要讓大家積累這一類經驗。

(1)将第6行cin>>a>>b; 一行末尾的分号去掉要制造的錯誤如下(一項“搗亂”結束後,将程式再改正過來,繼續“搗亂”):

(2)将第5行int a,b,sum;改為int a, b;,即聲明變量時,未聲明sum

(3)将第8行cout<< 寫為 cout<<,注意前面表述中的大小寫

(4)将第8行cout<< 寫為了 cout>>

(5)将第7行sum=a+b; 改為 sum=ab; 即漏寫了加号

(6)将第10行程式最後的右花括号 } 删除

(7)将第5行int a,b,sum; 改為imt a,b,sum; 注意,可能小手一哆嗦,int成了imt

(8)你是個比賀老師還壞的壞孩子,還想到什麼搗亂,自己來

參考解答:

說明:

下面的提示,是ideone.com中的提法出現的錯誤提示,在其他平台中,可能會有不同的描述,但意思一般相同;

鑒于同學們剛學,不能用太專業和深入的解釋,下面的提示隻追求讓同學有體會即可,随着學習的進展,你自己可以給出完整的解釋。

各種亂改後的解釋:

(1)将第6行cin>>a>>b; 一行末尾的分号去掉

系統提示“編譯失敗(ce)”具體地:

1. prog.cpp: in function ‘int main()’:

2. prog.cpp:7:5: error: expected ‘;’ before ‘sum’

3.     sum=a+b; 

4.     ^

  第1行提示“in function ‘int main()’”,指出在函數int main()中出現錯誤了

  第2行提示“7:5:”指這個錯誤出現的原因,與第7行上溯第5行的程式有關,這是一個錯誤(error),原因是“expected ‘;’ before ‘sum’”,即“在sum前希望有個分号”。程式中每一個語句後都得有分号,第6行末缺分算,算帳算到第7行!這個事實要接受。修改方法,按提示,sum前,即上一行末,加上分号。

  第3行指出,錯誤是在“sum=a+b”這兒發現的

  第4行的“^”指向了出問題的具體位置

“編譯資訊”部分提示

2. prog.cpp:7:5: error: ‘sum’ was not declared in this scope

  第2行提示“7:5:”指這個錯誤出現的原因,與第7行上溯第5行的程式有關,這是一個錯誤(error),原因是“‘sum’ was not declared in this scope”,即“sum在這個範圍内沒有被聲明”,的确,程式中第7行要用sum,但之前未聲明,錯誤和第7行有關;程式第5行是個聲明語句,要是在此聲明了,也不會出錯誤,說和第5行有關,也算合理。

(3)将第8行cout<< 寫為 cout<<,注意前面表述的大小寫

  提示的第2行是:

  prog.cpp:8:5: error: ‘cout’ was not declared in this scope

  c++的詞彙中,大小寫嚴格區分,編譯器認識“cout”,遇到“cout”不認識了,就說“cout在這個範圍内沒有聲明。”冷靜點,不要按提示聲明cout去,而是把大寫改成小寫。

  提示的第2行指出:

  prog.cpp:8:9: error: no match for ‘operator>>’(#@#&*!$#……)

  這是操作符不比對。cout應該與<<比對,與>>比對的是cin。

  提示的第2行指出

  prog.cpp:7:9: error: ‘ab’ was not declared in this scope

  漏寫了加号,ab連起來是一個新的變量名,這個變量逃不脫“未被聲明”。

  prog.cpp:9:13: error: expected ‘}’ at end of input

  有左括号,必須有右括号比對,這個提示相當精準。

  出現了一堆的提示,“一錯百錯”?int 是資料類型的名字,寫成imt,系統以為是變量名,是變量名,得提前聲明,然而卻沒有,于是第一個提示:

  prog.cpp:5:5: error: ‘imt’ was not declared in this scope

  于是這一行也就不能當作為聲明變量講了,需要有分号啦、a、b、sum“未被聲明”啦之類的錯誤,接踵而來。

  注意到int寫對時,是藍色的,這叫為語言本身的成份進行的“文法着色”。imt沒有這樣的特點,這也是待積累的經驗。

繼續閱讀