c++ - do while 循环中的 if 语句以 yes 或 no 结尾

标签 c++ if-statement do-while

我是编码新手,我正在尝试使用嵌套的 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/

相关文章:

c++ - ofstream 不创建文件(Node.js 插件)

c++ - 模板成员函数重载问题

javascript - 将 useState 与 setInterval 内的 if 条件一起使用不起作用

c# - 我如何知道何时创建进程并阻止它在 Windows 中执行或终止?

mysql - 调用过程时 IF-ELSE 不起作用

javascript - 如何使用 if 语句从 select 标记中提取值? (Javascript)

java - 如何计算Android设备的屏幕开启时间

c - 在 do-while 循环中定义的未声明标识符

java - 将华氏度转换为摄氏度 (Java)

c++ - 获取卷列表总是说 C :\