我想运行 YES/NO 循环以使用 vector<string> 输入学生列表并显示它,直到用户选择输入学生姓名
Posted
技术标签:
【中文标题】我想运行 YES/NO 循环以使用 vector<string> 输入学生列表并显示它,直到用户选择输入学生姓名【英文标题】:I want to run a YES/NO loop to enter a list of students using vector<string> and display it until user opts to enter the student name 【发布时间】:2021-10-11 20:58:52 【问题描述】:这是我的代码,我不明白我在这做错了什么。每次按下“y”或“Y”后,输入字符串不会连续工作。相反,它在第一次输入字符串后一次又一次地显示问题消息。
int main()
vector<string> v;
int count=0;
bool value=true;
string s;
char ch;
cout<<"Start entering the name of the students :- "<<endl;
while(value)
getline(cin,s);
v.push_back(s);
count++;
cout<<"Do you want to Enter one more name :- Press 'y/Y' to continue or 'n/N' to end -> ";
cin>>ch;
if(ch=='n'||ch=='N') value=false;
cout<<"So, there are total "<<count<<" number of students and their names are :-"<<endl;
for(auto x:v) cout<<x<<endl;
return 0;
【问题讨论】:
这能回答你的问题吗? Why does std::getline() skip input after a formatted extraction? 【参考方案1】:我认为,当我们输入数值时,我们按 Enter,因此 Enter 键也进入输入,但 cin 在输入之前取值并将输入留在流中,因此当我们获得下一个输入时,输入进入并且我们的输入被跳过(空)这是导致问题的原因。
所以我们应该总是使用 cin.ignore();在每个整数输入之后。其他数字输入可能会发生同样的情况。 在您的情况下,它发生在 char 输入上,这也是一个整数输入,因此它是预期的并且它可以工作,您可以查看我提供的解决方案。
int main()
vector<string> v;
int count = 0;
bool value = true;
string s;
char ch;
cout<<"Start entering the name of the students :- "<<endl;
while(value)
getline(cin,s);
v.push_back(s);
count++;
cout<<"Do you want to Enter one more name :- Press 'y/Y' to continue or 'n/N' to end -> ";
cin>>ch;
cin.ignore();
if(ch == 'n'|| ch == 'N')
value = false;
cout<<"So, there are total "<<count<<" number of students and their names are :-"<<endl;
for(auto x:v) cout<<x<<endl;
return 0;
【讨论】:
您可能需要考虑学生姓名可能包含空格这一事实。 我已经更新了代码,它运行良好:) 谢谢cin.ignore();
的位置将使其跳过输入的名字的第一个字母。
所以应该在 cin>>ch 之后; //??
是的,检查流 (std::cin
) 是否处于良好状态也很重要。否则,如果流被用户关闭,程序将无限循环运行。以上是关于我想运行 YES/NO 循环以使用 vector<string> 输入学生列表并显示它,直到用户选择输入学生姓名的主要内容,如果未能解决你的问题,请参考以下文章