0

我正在尝试创建一个结构并使用 while 循环从用户那里收集其输入,但是在第二次迭代中,它似乎只是跳过了输入。

#include <iostream>
#include <list>

struct Student {
    std::string name;
    std::string course;
    float mark;
};

int main() {

    std::list<Student> students;

    while (students.size() < 2) {
        Student student;

        std::cout << "Student Name:" << std::endl;
        std::getline (std::cin, student.name);
        std::cout << "Course and Mark:" << std::endl;
        std::cin >> student.course >> student.mark;

        students.push_back(student);
    }

    for(auto const& student: students) {
        std::cout << student.name << std::endl;
    }

    return 0;
}

输出如下所示:

Student Name:
Ari Stackoverflow
Course and Mark:
course543 56.2
Student Name:   <---- skipped :(
Course and Mark:
Steve Jobs

如您所见,第二次迭代它跳过了获取名称,不知道为什么。

4

1 回答 1

1

这里的问题是,当您在第二行输入后按“Enter”时,该换行符会std::getline(std::cin, student.name);在下一次迭代中输入。students[1].name一个空字符串也是如此。

要解决这个问题,请在阅读第二行之后添加std::cin.ignore()或。std::cin.get()这告诉cin忽略换行符。

于 2021-03-21T06:54:15.387 回答