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 循环。
我制作了一个询问学生信息(姓名、课程和年级)的程序,它被配置为在课程或学生的输入名称为 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 循环。