用户输入(cin) - 默认值

时间:2012-04-25 11:28:55

标签: c++ visual-c++

在询问用户输入时,我无法弄清楚如何使用“默认值”。我希望用户能够只按Enter键并获取默认值。考虑下面这段代码,你能帮助我吗?

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;

4 个答案:

答案 0 :(得分:12)

使用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;
}

答案 1 :(得分:9)

这可以作为已接受答案的替代方案。我会说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,有三种不同的运行和输入。

答案 2 :(得分:0)

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

答案 3 :(得分: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;