在询问用户输入时,我无法弄清楚如何使用“默认值”。我希望用户能够只按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;
答案 0 :(得分:12)
使用std::getline
从std::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;