[程序在调用函数时会跳过用户输入

问题描述 投票:-1回答:1

我在类内部有一个称为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();在每个用户输入之后,它仍然不起作用,任何建议都会有很大帮助!

c++
1个回答
0
投票
仅在调用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_; }

© www.soinside.com 2019 - 2024. All rights reserved.