6

在要求用户输入时,我不知道如何使用“默认值”。我希望用户能够只按 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

4 回答 4

14

用于std::getline从 中读取一行文本std::cin。如果该行为空,请使用您的默认值。否则,使用 astd::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;
}
于 2012-04-25T11:48:59.600 回答
12

这可以替代已接受的答案。我想说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';    
}

这是一个具有三种不同运行和输入的实时示例。

于 2012-04-25T11:49:45.237 回答
0
if(!cin)
   cout << "No number was given.";
else
   cout << "Number " << cin << " was given.";
于 2012-04-25T11:35:59.340 回答
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;
于 2012-04-25T11:49:14.767 回答