首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >以yes或no结尾的do while循环中的If语句

以yes或no结尾的do while循环中的If语句
EN

Stack Overflow用户
提问于 2018-10-09 16:58:19
回答 2查看 6.1K关注 0票数 15

我是个编程新手,我正在尝试用嵌套的if语句做一个长的do while循环,但是我在让我的循环真正循环时遇到了问题。

我没有直接从我的项目中获得帮助,而是做了一个简单的like it版本。它也不会循环。它将到达最后,并询问用户是否要重试,但当输入"y“时,它会忽略if语句。

代码语言:javascript
复制
#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,所以我没有意识到它与我的问题相关。感谢大家对我的教导!

EN

回答 2

Stack Overflow用户

发布于 2018-10-09 17:16:04

如果用户表现良好,并且只输入'y‘或'n’后跟换行符,则现有答案是正确的。

我们可以通过修改.ignore()调用来增加一点安全性,方法是要求它忽略包括下一个换行符在内的所有字符:

您需要在翻译单元的顶部添加此标题include:

代码语言:javascript
复制
#include <limits>

您需要在cin >> answer之前添加下面这一行

代码语言:javascript
复制
// 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

票数 7
EN

Stack Overflow用户

发布于 2018-10-09 17:10:35

由于您接受的是char类型的用户的输入,但每次按下Enter键时,它都会将换行符(\n)赋给变量answer

您可以通过在输入行后面添加一行来忽略此问题

代码语言:javascript
复制
cin.ignore();

你可以阅读this了解更多细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52717083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档