2011-09-12 45 views
1

這裏是我的代碼摘錄,其中的問題在於。如何在終止前強制輸入?

long long user_largest_plus; 
    long long user_largest_minus; 
    cout << "Input the largest+1 in decimal: " << endl; 
    cin >> user_largest_plus; 
//cout << endl; 


    // cout << "Input the largest-1 in decimal: " << endl; 
    cin >> user_largest_minus; 
    cout << endl; 

    cout << "In decimal plus: " << user_largest_plus; 
    cout << endl; 
    cout << "In decimal minus: " << user_largest_minus; 

當我輸入9223372036854775808到user_largest_plus,執行將終止。也就是說,我無法輸入user_largest_minus。 我正在使用Code :: Blocks,MinGW編譯器。

是因爲我只是溢出了變量,並且錯誤引發了這個終止。任何工作?

順便說一下,那個號碼是2^63 - 1,我可以存儲的最大號碼。

感謝

+0

不要讓用戶添加或減去一個;使計算機做到這一點 –

+0

oh right,使用''中的'LLONG_MAX'因爲long long _cannot hold_ 9223372036854775808.即2^63而不是2^63-1 –

回答

4

嘗試

if(!(cin >> user_largest_plus)) { 
    user_largest_plus = 0; 
    cin.clear(); 
    cout << "Bad input. Using zero instead\n"; 
} 

當輸入文本不更換

cin >> user_largest_plus; 

有效long long,兩個有趣的事情發生了:

  • user_largest_plus從未設置,並且
  • bad位設置在cin

所提供的代碼集一些價值user_largest_plus,以避免不確定的行爲,並清除壞一點,這樣cin仍然可以使用。

+0

您可能想要打印錯誤:發現問題 –

+0

謝謝,@Tux。Done。 –

+0

+1方式比我的答案更好 –

1

假設這是因爲輸入的號碼是大(和防止錯誤當用戶輸入APPLE的大小,你應該做這樣的事情:

string user_largest_plus_string; 
long long user_largest_plus; 
cout << "Input the largest+1 in decimal: " << endl; 
cin >> user_largest_plus_string; 
user_largest_plus = atoi(user_largest_plus_string.c_str()); 
if (user_largest_plus == 0) 
    throw std::runtime_error("User entered something besides a number!"); 
cout << "largest+1 is now " << user_largest_plus << "." << endl;