2011-11-21 92 views
0

我有這個簡單的try catch來拋出cin異常,但它從不拋出異常。cin和try/catch

while(cin>>num) { 
    try { 
     if(cin.fail()) { 
     throw "error"; 
     } 
     if(num>0) { 
     cout << "number greater than 0" << endl; 
     } 
    } 
    catch(char* error) { 
     cout << error << endl; 
    } 
} 

爲什麼它不拋出異常?

+0

這可能是不相關的,但你應該打印錯誤'cerr' ,而不是'cout'。 –

+1

哦,順便說一下。請不要拋出那些不是來自std :: exception的東西。 –

回答

3

CIN >> NUM返回false,那麼你的循環的身體沒有得到所有執行。

如果你真的需要使用execption

while(true) 
{ 
    cin >> num; 
    try{ 
     if(cin.fail()){ 
      throw "error"; 
     } 
     if(num>0){ 
      cout<<"number greater than 0"<<endl; 
     } 
    } 
    catch(char* error){ 
     cout<<error<<endl; 
      break; 
    } 
} 

這是更好地把嘗試捕捉外循環,以獲得更好的性能

+0

那麼,我該如何才能捕獲非整數的用戶輸入異常呢? – user1035927

+0

好,我甚至沒有注意到。 –

+0

謝謝你的幫助菲爾。我現在有一個問題,我正在通過重定向的文本文件進行用戶輸入,如:checknumber user1035927

3

字符串常量,如「錯誤」,不匹配char*,它需要const char*

+0

編譯期間不會拋出錯誤?或者,也許只是一個警告,提問者沒有「 - 牆」? –

+1

@Andrew:我不知道爲什麼這是一個錯誤。他不是試圖調用一個函數,而只是一個未捕獲的異常。 –

+0

是的,我想我只是覺得一個未捕獲的異常至少應該是一個警告,因爲這樣的類型不匹配。 –