2017-09-21 34 views
0

我是C++初學者,我想知道你是否可以幫助我。如何僅接受整數並忽略其他數據類型?

我正在製作一個程序,並且此程序需要進行錯誤檢查。 那麼,我怎樣才能接受整數只忽略其他數據類型?

例如:

int tilenumber; 
cin >> tilenumber; 
cin.clear(); 
cin.ignore(); 
cin >> words; 

當我的代碼運行:

輸入:1 嘿,我想跳舞

輸出:EY我想跳舞

///

我想要的:

案例1: 輸入:1

嘿我想跳舞

輸出:嘿我想跳舞

情況2: 輸入:1E

嘿我想跳舞

輸出:嘿,我想跳舞

爲什麼我的代碼不工作?

我試圖用我的代碼解決我的問題,但它不工作。

謝謝。

+2

你能告訴我們一個[MCVE(HTTPS:/ /stackoverflow.com/help/mcve)? – SirGuy

+1

以字符串形式讀取所有數據。然後檢查字符串的內容以提取整數值,並丟棄任何不需要的內容。 C++ I/O函數不會爲你做這種檢查 - 如果你需要它,你必須閱讀輸入並自己檢查。 – Peter

+0

謝謝! @Peter我會試一試 –

回答

1

閱讀整個字符串並利用std::stoi功能:

#include <iostream> 
#include <string> 
int main() { 
    std::cout << "Enter an integer: "; 
    std::string tempstr; 
    std::getline(std::cin, tempstr); 
    try { 
     int result = std::stoi(tempstr); 
     std::cout << "The result is: " << result; 
    } 
    catch (std::invalid_argument) { 
     std::cout << "Could not convert to integer."; 
    } 
} 

另一種方法是利用std::stringstream並做解析:

#include <iostream> 
#include <string> 
#include <sstream> 
int main() { 
    std::cout << "Enter an integer: "; 
    std::string tempstr; 
    std::getline(std::cin, tempstr); 
    std::stringstream ss(tempstr); 
    int result; 
    if (ss >> result) { 
     std::cout << "The result is: " << result; 
    } 
    else { 
     std::cout << "Could not convert to integer."; 
    } 
} 
相關問題