我是编码新手,我正在尝试使用嵌套的 if
语句执行一个长的 do while
循环,但我在让我的循环实际运行时遇到问题环形。
我没有直接在我的项目上获得帮助,它有很长的代码,我做了一个简单的喜欢它的版本。它也不会循环。它将到达最后并询问用户是否要再试一次,但是当输入“y”时,它会忽略 if 语句。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string sodaChoice;
char answer = 'n';
do
{
cout << "Please choose your favorite soda from the following: Rootbeer, Diet Coke, Coke, Sprite" << "\n";
getline(cin, sodaChoice);
if (sodaChoice == "Rootbeer")
{
cout << "Me too!" << "\n";
}
else if (sodaChoice == "Diet")
{
cout << "Not me :(" << "\n";
}
else if (sodaChoice == "Coke")
{
cout << "It's alright" << "\n";
}
else if (sodaChoice == "Sprite")
{
cout << "only if I'm sick" << "\n";
}
else
{
cout << "That was not on the list";
}
cout << "would you like to try again?";
cin >> answer;
} while (answer == 'y'|| answer == 'Y');
return 0;
}
我想也许我需要在 if 语句周围的 do 循环中使用 do 循环,但后来我不知道如何去做。任何帮助,将不胜感激。我花了很多很多时间试图弄清楚。
我试图问我的老师,但我的大学教授的一些通用类(class)是他们的院长根据她的书编写的。他对帮助或教学不是很热心。
编辑: 谢谢大家的回答!至于这是一个重复的问题,我还没有学习 cin.ignore ,所以我不知道它与我的问题有关。谢谢大家教我!
最佳答案
有
cin >> answer;
你读到了一个字符。问题是您在编写答案时至少输入了 两个 个字符。实际的 'y'
或 'n'
plus Enter 键,作为换行符添加到输入缓冲区。
然后,下一个 getline
调用会将该换行符读取为空行。
有一些解决这个问题的方法,例如使用 ignore
读入answer
后。或者,如果您只想要一个单词输入,那么您也可以使用 >>
为 sodaChoice
使用格式化输入,因为它默认会跳过前导空格(如换行符) .
关于c++ - do while 循环中的 if 语句以 yes 或 no 结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52717083/