c++ - do while 循环中的 if 语句以 yes 或 no 结尾
问题描述
我是编码新手,我试图do while
用嵌套if
语句做一个长循环,但我在让我的循环真正循环时遇到问题。
我没有直接在我的项目上获得帮助,它有很长的代码,我做了一个简单的喜欢它的版本。它也不会循环。它将到达最后并询问用户是否要再试一次,但是当输入“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 ,所以我不知道它与我的问题有关。谢谢大家教我!
解决方案
和
cin >> answer;
你只读了一个字符。问题是您在写答案时至少输入了两个字符。实际的'y'
或'n'
加号键Enter,作为换行符添加到输入缓冲区中。
然后,下一次调用会将该换行符读取getline
为空行。
这个问题有一些解决方案,例如使用ignore
after read into answer
。或者,如果您只想要一个单词输入,那么您也可以使用>>
for格式化输入sodaChoice
,因为它默认会跳过前导空格(如换行符)。
推荐阅读
- javascript - 我如何在我的反应页面中使用 jquery/html/css 组件
- android - 如何在底部导航中使所选项目可点击
- java - 无法从 Kotlin 中的自定义 ResyclerView 扩展适配器
- android - 使用服务用片段膨胀活动
- download - 下载 blob 网址
- postgresql - 包装函数抛出“查询没有结果数据的目的地”错误
- javascript - 如何在 TinyMce 的预代码块中保留跨度标签和类
- javascript - 将图像从烧瓶发送到 js 文件
- django - Django 错误:user_register_model 匹配查询不存在
- r - 根据列的值重复data.table中的行