我是个编程新手,我正在尝试用嵌套的if
语句做一个长的do while
循环,但是我在让我的循环真正循环时遇到了问题。
我没有直接从我的项目中获得帮助,而是做了一个简单的like it版本。它也不会循环。它将到达最后,并询问用户是否要重试,但当输入"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循环,但是我不知道该怎么做。任何帮助都将不胜感激。我花了很多很多时间试图弄清楚这一点。
我试着问我的老师,但我的大学教授的是他们的院长根据她的书写的一些通用课程。他对帮助或教学不是很热心。
编辑:感谢大家的回答!至于这是一个重复的问题,我还没有学习过cin.ignore,所以我没有意识到它与我的问题相关。感谢大家对我的教导!
发布于 2018-10-09 17:16:04
如果用户表现良好,并且只输入'y‘或'n’后跟换行符,则现有答案是正确的。
我们可以通过修改.ignore()调用来增加一点安全性,方法是要求它忽略包括下一个换行符在内的所有字符:
您需要在翻译单元的顶部添加此标题include:
#include <limits>
您需要在cin >> answer
之前添加下面这一行
// consumes and ignores as many characters as necessary until a newline.
// The newline is also consumed.
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
包含测试输入的完整程序如下:
http://coliru.stacked-crooked.com/a/996e77559590ad6d
不幸的是,计算机科学教师对计算机科学一无所知并不少见。不要担心这一点,或者让它阻止你学习如何编写软件--这只是一个症状,表明优秀的软件工程师比优秀的教师获得的报酬要高得多。
这里有一些有用的参考资料:https://en.cppreference.com/w/cpp/io/basic_istream/ignore
发布于 2018-10-09 17:10:35
由于您接受的是char
类型的用户的输入,但每次按下Enter
键时,它都会将换行符(\n
)赋给变量answer
。
您可以通过在输入行后面添加一行来忽略此问题
cin.ignore();
你可以阅读this了解更多细节。
https://stackoverflow.com/questions/52717083
复制相似问题