2012-04-25 79 views
4

我不知道如何在詢問用戶輸入時如何使用「默認值」。我希望用戶能夠按Enter鍵並獲取默認值。考慮下面的一段代碼,你能幫助我嗎?用戶輸入(cin) - 默認值

int number; 
cout << "Please give a number [default = 20]: "; 
cin >> number; 

if(???) { 
// The user hasn't given any input, he/she has just 
// pressed Enter 
number = 20; 

} 
while(!cin) { 

// Error handling goes here 
// ... 
} 
cout << "The number is: " << number << endl; 

回答

9

使用std::getlinestd::cin閱讀的文本行。如果該行爲空,請使用您的默認值。否則,請使用std::istringstream將給定的字符串轉換爲數字。如果此轉換失敗,將使用默認值。

下面是一個示例程序:

#include <iostream> 
#include <sstream> 
#include <string> 

using namespace std; 

int main() 
{ 
    std::cout << "Please give a number [default = 20]: "; 

    int number = 20; 
    std::string input; 
    std::getline(std::cin, input); 
    if (!input.empty()) { 
     std::istringstream stream(input); 
     stream >> number; 
    } 

    std::cout << number; 
} 
+0

是否有任何方法來檢查用戶是否輸入有效的輸入(如在cin中)。 我的意思是,我想要檢測用戶輸入某些字符而不是數字並輸出錯誤信息。 – tumchaaditya 2012-04-26 02:44:36

0
if(!cin) 
    cout << "No number was given."; 
else 
    cout << "Number " << cin << " was given."; 
0

我會忍不住用getline()讀取線爲一個字符串,那麼你(可以說)在轉換過程中加以控制:

int number(20); 
string numStr; 
cout << "Please give a number [default = " << number << "]: "; 
getline(cin, numStr); 
number = (numStr.empty()) ? number : strtol(numStr.c_str(), NULL, 0); 
cout << number << endl; 
7

這可以作爲接受答案的替代方法。我會說std::getline在矯枉過正的一面。

#include <iostream> 

int main() { 
    int number = 0; 

    if (std::cin.peek() == '\n') { //check if next character is newline 
     number = 20; //and assign the default 
    } else if (!(std::cin >> number)) { //be sure to handle invalid input 
     std::cout << "Invalid input.\n"; 
     //error handling 
    } 

    std::cout << "Number: " << number << '\n';  
} 

這裏有一個live sample有三個不同的運行和輸入。

+0

對於它的價值,我同意 - 我喜歡你的版本比我的更好。 – 2015-08-26 15:08:10