用户输入(cin) - 默认值

tum*_*tya 5 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;
Run Code Online (Sandbox Code Playgroud)

Fre*_*abe 12

用于std::getline从中读取一行文本std::cin.如果该行为空,请使用您的默认值.否则,使用a 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;
}
Run Code Online (Sandbox Code Playgroud)


chr*_*ris 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';    
}
Run Code Online (Sandbox Code Playgroud)

这是一个包含三种不同运行和输入的实时样本.