首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在控制台中获得是/否总是失败

在控制台中获得是/否总是失败
EN

Stack Overflow用户
提问于 2016-03-21 08:40:01
回答 3查看 178关注 0票数 0

如果用户每次说“是”的话,我正试着制作一个会一遍又一遍运行的程序。不幸的是,当我输入“是”或“否”时,它似乎没有意识到,并且总是默认的“再次出现”吗?消息。这是我用来从控制台获取输入的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bool getYN(){
    bool confirmed = 0;
    bool answer = 0;
    string input;
    while(!confirmed){
        getline(cin, input, '\n');
        transform(input.begin(), input.end(), input.begin(), toupper);

        if(input.c_str() == "Y" || input.c_str() == "YES"){ //If the user says yes
            confirmed = 1;
            answer = 1;
        } else if(input.c_str() == "N" || input.c_str() == "NO"){ //If the user says no
            confirmed = 1;
            answer = 0;
        } else { //If the user says something else entirely
            printf("\nCome again? (Y/N) ");
        };
    };
    return answer;
};

我包括了<string><algorithm>。出于某种原因,当我输入y/yes或n/no时,它总是表现得好像没有得到y/yes或n/no。只是一直要求我再回答一次。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-21 08:42:59

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(input.c_str() == "Y" || input.c_str() == "YES"){ //If the user says yes
    confirmed = 1;
    answer = 1;
} else if(input.c_str() == "N" || input.c_str() == "NO"){ //If the user says no
    confirmed = 1;
    answer = 0;
}

你不应该像这样做c-字符串比较。您正在获取字符的地址,并与文本分配对象的地址进行比较。当然,比较将返回false。

对于c++字符串,简单的operator==比较是有效的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(input == "Y" || input == "YES"){ //If the user says yes
    confirmed = 1;
    answer = 1;
} else if(input == "N" || input == "NO"){ //If the user says no
    confirmed = 1;
    answer = 0;
}
票数 4
EN

Stack Overflow用户

发布于 2016-03-21 09:07:07

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <string>
using namespace std; // For speed

int main()
{
   bool saidYes = false;
   string input;
   while (!saidYes)
   {
       cout << "Input yes or no: ";
       getline(cin, input); 

       if (input == "no" || input == "n" || input == "NO")
       {
           saidYes = true; // breaks the loop
       }

       if (input == "y" || input == "Y" || input == "yes" || input == "YES")
       {
           saidYes = false;
       }
   }

 return 0;
}

您可以使用上面的示例来消除大量不必要的代码,我选择不添加use语句,但是如果您在这里添加该语句,它也会工作。

您还可以进一步压缩这段代码,但这只是一个简单的示例,说明如何更好地为您工作!

如前所述,您可以使用==来比较字符串,如果您来自某些其他语言,那么习惯lol可能是一个恼人的变化。

我包括了字符串和算法。出于某种原因,当我输入y/yes或n/no时,它总是表现得好像没有得到y/yes或n/no。只是一直要求我再回答一次。

算法对于你想要做的事情并不是必需的,而且你使得字符串输入的读取和接受比它所需要的要困难得多。

如果您在上面查看,您将看到string input;,这将是您可以用来存储用户输入字符串的变量。

您还会注意到getline(cin, input);,这是您可以用来“读取”用户在被提示时输入的字符串。

@我最初的回答只是针对你的问题,下面这个例子是针对你对我的评论!

因此,您有很多选项,但是假设您希望用户输入是或否,并且取决于输入,同时确保用户一次又一次地被提示输入是或否,那么您所要做的就是像这样修改我原来的答案。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <string>
using namespace std; // For speed
int main()
{
    bool saidYes = false;
    string input;
    while (!saidYes)
    {
        cout << "Input yes or no: ";
        getline(cin, input);

        if (input == "no" || input == "n" || input == "NO")
        {
            saidYes = true; 
            cout << "you said no" << endl; 
        /* breaks the loop by changing the 
           bool (true or false flag) to true, if you want to produce a specific result,   
           whether it's a simple output statement or a function call you can put it here

        */
        }

        else if (input == "y" || input == "Y" || input == "yes" || input == "YES")
        {
            saidYes = true;
            cout << "You said yes" << endl;
        /* breaks the loop by changing the 
           bool (true or false flag) to true, if you want to produce a specific result, 
           whether it's a simple output statement or a function call you can put it here

        */
        }

        else saidYes = false;
   }

  return 0;
}
票数 0
EN

Stack Overflow用户

发布于 2016-03-29 19:38:47

我已经根据当前最好的答案修改了我的代码,但我也优化了它,这样就不再需要confirmed了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bool getYN(){
    bool answer = 0;
    string input;
    while(!answer){
        getline(cin, input, '\n');
        transform(input.begin(), input.end(), input.begin(), toupper);

        if(input == "Y" || input == "YES"){
            answer = 2;
        } else if(input == "N" || input == "NO"){
            answer = 1;
        } else {
            printf("\nCome again? (Y/N) ");
        };
    };
    return answer - 1;
};

小的优化,当然,但是每一点都很重要。

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

https://stackoverflow.com/questions/36136823

复制
相关文章
使用 MDT 2010 进行可伸缩部署
最近半个月在实施学习Windows 7自动化部署过程中的一个总结分享。Microsoft Deployment Toolkit 2010是微软最新一代部署工具,MDT是自动完成桌面和服务器部署的推荐操作进程和工具,部署Windows 7和Windows Server 2008 R2的用户可以使用MDT 2010来完成。它是一组最佳实践指南和工具,旨在帮助将 Windows® 部署到客户端桌面。Windows 7® 包含解决方案加速器的更新,此更新以 MDT 2010 的形式提供。该版本包含新的 Micros
张善友
2018/01/19
1.8K0
使用 MDT 2010 进行可伸缩部署
自动化批量安装Windows11——Windows Servcer 2022 MDT
Windows Server 2022和Windows 11都发布一段时间了,使用的客户也渐渐多了起来,今天来讲解一下,如何利用Windows Server 2022来批量化地自动部署Windows 11。
IT狂人日志
2022/05/18
3.5K0
自动化批量安装Windows11——Windows Servcer 2022 MDT
用Exception类捕获所有异常的技术是怎么用的?
马克-to-win:注意,一个事实是:Exception类是所有其他异常类的父类,所以Exception类能捕获所有的异常。马克-to-win:问题是用Exception来捕获所有的异常,这个技术有什么好处和缺点?好处就是:不管发生什么异常,都能进入Exception catch块儿,这样,程序都不崩溃。马克-to-win:缺点就是:不能根据特定的异常做特定的处理。马克-to-win:比如,对于以上例子,我们可以用以下的技术,Exception来捕获所有的异常,都可以达到程序不崩溃的目的。马克-to-win:因为Exception是所有其他异常的父类。
马克java社区
2021/04/07
4910
用Exception类捕获所有异常的技术是怎么用的?
查看已安装的packages
随着使用Python的时间越来越长,安装的python模块也越来越多。然而时间久了都不记得自己之前到底对自己的电脑做过些什么了,特别是当某个package新出了一个package的时候,老版本是不是就要退出了呢?哈哈哈,于是乎小编今天就整理了一下,如何就查看已经安装的python模块,以及该安装模块的具体信息的操作步骤。以Tensorflow为例,选中即可打开,效果如下:
企鹅号小编
2018/01/02
1.6K0
查看已安装的packages
批量化自动安装操作系统,自动加域,自动安装软件
在2月18日发布的上一篇文章中,讲解了利用WDS结合MDT的方式,批量化地自动部署Windows 11的过程,当时发现一个小小的bug,就是配置文件中预先输入的用户名和密码无效,客户端从网卡启动后,必须输入用户名和账号才能开始安装。
IT狂人日志
2022/05/18
2.2K0
批量化自动安装操作系统,自动加域,自动安装软件
Ubuntu 删除已安装的桌面
Remove Kubuntu Paste this command into the terminal: sudo apt-get remove akonadi-server akregator amarok amarok-common amarok-utils appmenu-qt apport-kde apturl-kde ark bluedevil cdparanoia cdrdao docbook-xsl dolphin dragonplayer freespacenotifier gdebi-co
零式的天空
2022/03/02
3.2K0
【Python】查看Python已安装的
1. 找到python路径 >>> where python 2. cd 打开所在文件夹 >>> cd path 3. >>> pip list 即可看到所有已安装的package
py3study
2020/01/06
1.4K0
如何卸载已安装的 Python
一个比较好的方法是执行当时的安装程序,会提示已存在是否卸载选项,就可以卸载了。 类似: python-3.7-amd64.exe  点击执行: 会有 Modify 、Repari 和 Uninstall 选项。
Lokinli
2023/03/09
1.1K0
如何卸载已安装的 Python
我用这个线程池捕获了后端妹子的芳心
写了几篇扫盲性质的java数据结构文章后,感觉好像都太偏向于理论了,也没有从实战角度出发。写博客的初衷的也是为了提升个人技术的同时,能够将技术更好的应用到日常的学习与工作中【当然,用到面使中也是极好哈,哈哈哈】。本文将给大家大家介绍一个博主日常工作中最喜欢使用的一个线程池工具类。这个类是在我结合很多日常业务场景下整合出来的一个工具类,开箱即用,希望能够帮助到大家
柏炎
2022/08/23
5150
我用这个线程池捕获了后端妹子的芳心
已安装的nginx如何添加模块
nginx的模块是需要重新编译nginx,而不是像apache一样配置文件引用.so。这里以安装第三方ngx_http_google_filter_module模块为例: 1. 下载第三方扩展模块ngx_http_google_filter_module
菲宇
2019/06/12
12.7K0
PHP正则中的捕获组与非捕获组
枕边书
2018/01/04
2K0
PHP正则中的捕获组与非捕获组
用伪代码理解浏览器中的事件冒泡以及捕获
浏览器会获取到每一个节点的位置和宽度、高度。 好了,从这个时候开始,浏览器就会运行自己的事件循环,查看是否有各种事件发生 于是,这个时候,用户点击了一下页面上的某一块位置,但是浏览器并不知道用户点 击了哪一个dom,并且也不知道该dom是否有事件响应程序,浏览器知道的只是用户点 击的位置的x,y坐标,浏览器这个时候就开始从dom树的根开始寻找,(这里是捕获的 开始),x,y是否在根的位置上,根有没有注册点击事件?点击事件是否是捕获注册的 ?如果事件是捕获注册的,那么执行这个事件处理函数,在该函数中,判断是否有 event.stopPropagation()来阻止事件的捕获,若阻止了,那么该点击事件的整个过程就完 成了,不论子节点是否注册了点击事件都不会执行到的。然后接着往后找,进行同样的 判断,知道找到叶子节点位置(这里是捕获的结束)。同样要判断该叶子节点是否注册 了点击事件?是否阻止了事件?然后怎么来的,就怎么回去(这里是冒泡的开始)。在回 去的过程中,判断每个节点是否注册了点击事件,是否是冒泡注册的,如果是冒泡注册的 事件,那么就执行,执行过程中如果发生了event.stopPropagation(),那么整个点击事件 就结束了,如果没有就接着往根走,直至结束。 以下是伪代码
Theone67
2019/11/21
6810
【Python】异常处理 ③ ( 捕获所有类型的异常 | 默认捕获所有类型异常 | 捕获 Exception 异常 )
使用 try-except 语句 , 不指定异常类型 , 默认就可以捕获所有类型的异常 ;
韩曙亮
2023/10/11
2.2K0
【Python】异常处理 ③ ( 捕获所有类型的异常 | 默认捕获所有类型异常 | 捕获 Exception 异常 )
Mac下查看已安装的jdk版本及其安装目录[通俗易懂]
最近在学习JVM,需要运行jdk自带的命令行,需要在特定jdk目录下进行,所以需要查看jdk安装目录,之前也查过,忘记了。这次记录下来为以后备用。
全栈程序员站长
2022/09/27
2.7K0
Mac下查看已安装的jdk版本及其安装目录[通俗易懂]
获取主机已安装程序的多种方式
这篇文章我们主要讲的是获取主机已安装程序的多种方式,通过获取的软件及版本信息可用于权限提升、搜集密码等。因为有的方式获取不完整或者可能被安全防护软件拦截,所有我测试了多个方法,以备不时之需。
潇湘信安
2022/09/14
1.6K0
获取主机已安装程序的多种方式
linux中查找所有已安装的字体
介绍 有一种快速的方法可以在你的 Linux 中找到所有已安装的字体。 在本文中,我们将使用fc-list命令列出Linux 系统上的所有字体和样式。 列出所有字体 要列出 Linux 系统上所有已安装的字体,请运行以下命令 > fc-list /usr/share/fonts/urw-base35/NimbusMonoPS-Italic.otf: Nimbus Mono PS:style=Italic /usr/share/fonts/urw-base35/D050000L.t1: D050000L:st
入门笔记
2022/06/02
8.1K0
Mac下查看已安装的jdk版本及其安装目录
打开终端,输入: /usr/libexec/java_home -V
JavaEdge
2021/02/23
1.8K0
Mac下查看已安装的jdk版本及其安装目录
ubuntu安装软件和查看已安装软件
ubuntu安装和查看已安装 说明:由于图形化界面方法(如Add/Remove... 和Synaptic Package Manageer)比较简单,所以这里主要总结在终端通过命令行方式进行的软件包安装、卸载和删除的方法。 一、Ubuntu中软件安装方法 1、APT方式 (1)普通安装:apt-get install softname1 softname2 …; (2)修复安装:apt-get -f install softname1 softname2... ;(-f Atemp to cor
herve
2018/06/25
10.8K0
69000000台设备已安装的现场总线!
当然,这首当其冲的是西门子的前期大量推广,我们很多工程师第一次体验基本都是西家的产品上用了,这才开始了解和应用该总线技术。
Hello工控
2024/07/30
960
69000000台设备已安装的现场总线!
Android之共享已安装的apk应用
          是否遇到过自己手机上有好的应用,但不知道怎么分享给好友的时候呢?作为一名程序员,遇到了这样简单的问题,肯定要想办法解决,经过google和百度,查得android上所有已安装的应用都会做一个备份,分别存放在三个地方: 1、系统签名的软件:/system/app 2、安装到内存上的非系统签名软件:/data/app 3、安装到sd卡上的非系统签名软件:/mnt/asec/包名-数字/pkg.apk 我们可以使用re浏览器查看和分享这些apk,本人已确认过,这些应用都是可用的,但是
forrestlin
2018/05/23
3.4K0

相似问题

内容类型标头的RFC?

10

ServiceStack XDomainRequest和缺少的内容类型标头

14

Axios:请求标头缺少内容长度标头

25

RabbitMQ忽略标头内容-类型

10

如何设置JMS消息的内容类型标头

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文