while循环提前中断

While loop breaks early

我制作了一个询问学生信息(姓名、课程和年级)的程序,它被配置为在课程或学生的输入名称为 stop

时中断

这是我的代码:

#include <iostream>
#include <vector>

using namespace std;

int main() {

    vector<string> v;
    string name;
    string course;
    string grade;

    while (name != "stop") {
        cout << "Please type a student name: ";
        getline(cin, name);

        if (name != "stop") {
            v.push_back(name);
        }

        while (course != "stop") {
            cout << "Please type a course name: ";
            getline(cin, course);
            if (course != "stop") {
                v.push_back(course);
            }
            if(course != "stop" == 0){
                break;
            }
            else {
                cout << "Please type the grade: ";
                getline(cin, grade);
                v.push_back(grade);
            }
        }
    }



    //for (auto iter = v.begin(); iter != std::prev(v.end()); ++iter){
    //    std::cout << *iter << std::endl;
    //}

    return 0;
}

我希望程序在第一个学生课程被称为“停止”时请求新学生,但这只是意味着每当输入新学生姓名时,“课程”的 while 循环一直“中断”因为最后输入的课程是“停止”。

关于如何解决这个问题有什么想法吗?

抱歉,如果问题阐述不当,如果您需要更多说明,请告诉我!

谢谢:)

您可以在中断内部 while 循环的 if 中将 course 变量设置为空字符串 ""

像这样:

if(course == "stop") {
    course = "";
    break;
}

对于初学者来说,这个 if 语句

    if (name != "stop") {

应该扩大并包括应该重写为 do while 循环的内部 while 循环。

例如

while (name != "stop") {
    cout << "Please type a student name: ";
    getline(cin, name);

    if (name != "stop") {
        v.push_back(name);

        do
        {
            cout << "Please type a course name: ";
            getline(cin, course);

            if (course != "stop") {
                v.push_back(course);
                cout << "Please type the grade: ";
                getline(cin, grade);
                v.push_back(grade);
            }
        } while ( course != "stop" );
    }
}

此外,@Remy Lebeau 在评论中写道,外部 while 循环也可以重写为 do-while 循环。