我在类内部有一个称为Route的类,我有一个成员函数,当在main中调用它时,它应该向用户询问一些问题,例如,当我调用该函数时,它将显示:
Please enter the name of the address:
Please enter the time you want to leave:
Please enter the arrival time:
//this is the function//
Route create_route() {
Route route_;
std::string name;
unsigned short int time;
std::cout << "Please enter the name of the address: ";
std::getline(std::cin, name);
cin.ignore();
route_.set_name(name);
std::cout << "Please enter the time you want to leave: ";
std::cin >> time;
std::cin.ignore();
route_.set_departure_time(time);
std::cout << "Please enter the arrival time: ";
std::cin >> time;
std::cin.ignore();
route_.set_arrival_time(time);
return route_;
}
int main() {
create_route();
}
[当我运行程序时,它跳过了第一手用户的输入,我已经厌倦了放置
cin.ignore();
在第一个用户输入之后,它起作用了,但是然后跳过了第二个:(如果我放了cin.ignore();在每个用户输入之后,它仍然不起作用,任何建议都会有很大帮助!
cin.ignore()
之后,才应在调用std::getline()
之后不调用operator>>
。如果要调用ignore()
跳过换行符,则应将'\n'
作为ignore()
的分隔符:Route create_route() {
Route route_;
std::string name;
unsigned short int time;
std::cout << "Please enter the name of the address: ";
std::getline(std::cin, name);
route_.set_name(name);
std::cout << "Please enter the time you want to leave: ";
std::cin >> time;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
route_.set_departure_time(time);
std::cout << "Please enter the arrival time: ";
std::cin >> time;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
route_.set_arrival_time(time);
return route_;
}
或者,使用std::getline()
读取所有输入,然后使用std::istringstream
解析它们:
Route create_route() { Route route_; std::string input; unsigned short int time; std::cout << "Please enter the name of the address: "; std::getline(std::cin, input); route_.set_name(input); std::cout << "Please enter the time you want to leave: "; std::getline(std::cin, input); std::istringstream(input) >> time; route_.set_departure_time(time); std::cout << "Please enter the arrival time: "; std::getline(std::cin, input); std::istringstream(input) >> time; route_.set_arrival_time(time); return route_; }