2012-10-13 21 views
1

我有一個任務,我必須製作一個程序,它接受用戶輸入(需要自然數),然後打印出反向號碼。該程序確實很好,但是我也必須確保程序在輸入非自然數值時不會給我任何錯誤。如果我輸入雙精度值或者輸入數字後跟字符,程序將退出。在其餘的情況下,該程序運行得很好。什麼可能導致這些問題?當int需要時,輸入double後C++程序退出。怎麼修?

int number; 
char x = 'c'; 
while (x == 'c') { 
    cout << "Enter a number\n"; 
    cin >> number; 
    while (!(cin.good()) || number < 1 || floor(number) != number) { 
     cin.clear(); 
     cin.ignore(256,'\n'); 
     cout << "Try again.\n"; 
     cin >> number; 
    } 
    string reverse; 
    stringstream convert; 
    convert << number; 
    reverse = convert.str(); 
    reverse = string (reverse.rbegin(),reverse.rend()); 
    cout << "The reverse number for number " << number << " is " << reverse << endl; 
    cout << "If you want to continue using the program enter 'c',\nif you want to close the program enter anythin else\n"; 
    cin >> x; 
    } 
+2

您可以刪除'floor(number)!= number',這對於int來說永遠不會是真的,不管輸入是什麼。 –

+0

floor()給你一個雙精度值,將它轉換爲整數。 –

+0

不,「floor」會給你一個'double',它已經'floor'了。 '(int)doubleValue'給你一個'double'強制轉換爲'int'。 – OmnipotentEntity

回答

0

我居然會拿double作爲輸入類型,然後將其轉換成一個自然數,因爲自然數是實數的一個子集...至少這將是要解決發生的錯誤,最簡單的方法通過用戶輸入雙打或任何其他浮點類型。

1

這是因爲咱們說123.456你的程序讀取爲int。然後反轉它,然後期望char x == 'c',但得到點

閱讀std::stringstd::cin之後,檢查它是否是int

std::string reverse; 
std::cin >> reverse; 

std::istringstream test(reverse); 
int value; std::string rest; 
if (!(test >> value) || (test >> rest)) // must read int but nothing more 
{ 
    prompt for new value 
} 
0

恕我直言:爲了滿足你的任務,你需要先讀出數字作爲一個字符串 ,那麼你可能要檢查,如果數字是一個自然數,即檢查是否有一個「」在字符串中,如果沒有,那麼做你之前做的,否則給出錯誤信息。

相關問題