热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如果dowhile循环中的语句带有yes或no结尾

如何解决《如果dowhile循环中的语句带有yes或no结尾》经验,为你挑选了3个好方法。

我是编码的新手,我正在尝试do while使用嵌套if语句进行长循环,但是我遇到了让循环实际循环的问题.

我没有直接获得有关代码很长的项目的帮助,而是制作了一个简单的版本.它也不循环.它将结束并询问用户是否要再次尝试但是当输入"y"时它忽略if语句.

#include 
#include 
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,所以我不知道它与我的问题有关.谢谢大家教我!



1> Some program..:

cin >> answer;

你只读了一个字.问题是你在写答案时输入了至少两个字符.实际'y''n' Enter键,其中加入作为在输入缓冲器换行.

然后,下一个getline调用将该换行读取为空行.

这个问题有一些解决方案,例如ignore在阅读之后使用answer.或者,如果你想只有一个字的输入,那么你可以使用使用格式化输入>>sodaChoice过,因为它会默认跳过前导空格(如新行).



2> Richard Hodg..:

在用户表现良好并仅输入"y"或"n"后跟换行符的情况下,现有答案是正确的.

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

您需要在翻译单元的顶部添加此标头包含:

#include 

你需要在之前添加这一行cin >> answer:

// consumes and ignores as many characters as necessary until a newline. 
// The newline is also consumed.
cin.ignore(std::numeric_limits::max(), '\n');

这里有测试输入的完整程序:

http://coliru.stacked-crooked.com/a/996e77559590ad6d

不幸的是,计算机科学教师对计算机科学一无所知并不罕见.不要担心这一点,或者让它让你不去学习如何编写软件 - 这只是一个好的软件工程师比好老师获得更多报酬这一事实的症状.

以下是一些有用的参考资料:https://en.cppreference.com/w/cpp/io/basic_istream/ignore



3> ilkkachu..:

我将提出与其他答案完全相反的建议.cin.ignore在你阅读的那个字符之后,我没有使用跳过任何多余的字符,我认为最好还是完全getline()忘掉所有的阅读cin >> somevar.

有两个原因:

    您获得的格式化输入cin >> somevar忽略了前导空格,包括换行符.如果用户点击Enter空行,程序不会执行任何操作,但仍需要进一步输入.这不是CLI程序用户所期望的!通常的期望是Enter完成输入,空输入应该导致程序使用默认值,或者抱怨无效输入.有了cin >> somevar,你也做不到.

    格式化输入在缓冲区中留下任何不匹配的输入.在您的示例中,读取单个字符至少会留下以下换行符,但其他类型的输入也会如此.读取数字(with int i; cin >> i;)会在数字等待下一个输入操作之后留下任何内容,因此输入123 abc将返回123,并且abc将出现在下一个输入操作中.

    其根本原因在于,默认情况下,命令行终端处于基于行的模式.在输入完整的行之前,程序或库函数看不到操作系统的任何输入.(cin.ignore()当然可以帮助你解决这个问题,但不是第一点.)

使用getline()完全匹配底层机制,让您处理空输入(以及在读取时告诉零和非数字之间的区别int),并自动处理尾随垃圾.但是,您必须手动将读取的字符串转换为您实际需要的字符串.

在您的情况下,您可以将循环条件简单地更改为以下内容:

string answer;
...
    getline(cin, answer);
} while (answer == "y" || answer == "Y");

如果您需要一个号码,您可以使用例如int num = std::stoi(str).


(在C中,如果scanf()用于用户输入,同样会发生,同样,最好使用fgets()然后解析字符串sscanf(),它提供相同的选项但处理行缓冲.我不太熟悉C++,所以我无法告诉如何获得cin >> somevar与完整行读取的完全等价getline().)


推荐阅读
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了在Cpp中将字符串形式的数值转换为int或float等数值类型的方法,主要使用了strtol、strtod和strtoul函数。这些函数可以将以null结尾的字符串转换为long int、double或unsigned long类型的数值,且支持任意进制的字符串转换。相比之下,atoi函数只能转换十进制数值且没有错误返回。 ... [详细]
  • STL学习笔记--数值算法
    数值算法  C++STL的数值算法(Numericalgorithms)是一组对容器元素进行数值计算的模板函数,包括容器元素求和accumulate、两序列元素的内积inner_pro ... [详细]
  • [置顶]        C++类的构造函数与析构函数的调用顺序
    1构造函数的调用顺序[1]构造函数按此顺序执行工作:按声明顺序调用基类和成员构造函数。如果类派生自虚拟基类,则会将对象的虚拟基指针初始化。如果类具有或继承了虚函数,则会将对象的虚函数指针初始化。 ... [详细]
  • Igotthiscode(IknowitsinSpanishIcantranslateifneeded)wheretheygivemethefunctionS ... [详细]
  • 字符串的题目用库函数往往能大大简化代码量介绍几个常用的C的字符串处理库函数strtok()原型char*strtok(chars[],constchar*delim); ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文介绍了在Python中使用zlib模块进行字符串的压缩与解压缩的方法,并探讨了其在内存优化方面的应用。通过压缩存储URL等长字符串,可以大大降低内存消耗,虽然处理时间会增加,但是整体效果显著。同时,给出了参考链接,供进一步学习和应用。 ... [详细]
author-avatar
Edison小磊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有