首页 > 解决方案 > 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 ,所以我不知道它与我的问题有关。谢谢大家教我!

标签: c++if-statementdo-while

解决方案


cin >> answer;

你只读了一个字符。问题是您在写答案时至少输入了两个字符。实际的'y''n' 加号Enter,作为换行符添加到输入缓冲区中。

然后,下一次调用会将该换行符读取getline为空行。

这个问题有一些解决方案,例如使用ignoreafter read into answer。或者,如果您只想要一个单词输入,那么您也可以使用>>for格式化输入sodaChoice,因为它默认会跳过前导空格(如换行符)。


推荐阅读