如何使用 std::cin 读取 bool

2024-03-20

我是 C++ 新手,我想知道函数 cin 在布尔数据的情况下如何工作。 比方说:

bool a;
cin >> a;

我知道如果我给出 0 或 1,我的数据 a 将是 true 或 false。 但是如果我给出另一个整数甚至一个字符串会发生什么?

我正在编写以下代码:

#include <iostream>

using namespace std;

int main()
{
    bool aSmile, bSmile;
    cout << "a smiling ?" << endl;
    cin >> aSmile;
    cout << "b smiling ?" << endl;
    cin >> bSmile;
    if (aSmile && bSmile == true)
        cout << "problem";
    else
        cout << "no problem";
    return 0;
}

如果我为两个布尔值指定 0 或 1 的值,则没有问题。 但如果我给出另一个整数,输出如下:

a smiling ?
9
b smiling ?
problem

系统不会要求我向 bSmile 输入任何值,该行cin >> bSmile似乎被跳过了。 如果我给 aSmile 一个字符串值,也会发生同样的情况。

发生了什么?


From 参考参数 http://en.cppreference.com/w/cpp/locale/num_get/get:

如果类型为v is bool and boolalpha没有设置,那么如果要存储的值为​0​, false被存储,如果要存储的值是1, true被存储为任何其他值std::ios_base::failbit被分配给err and true被储存了。

由于您输入的值不是0 or 1(甚至"true" or "false") 流在其流状态中设置一个错误位,阻止您执行任何进一步的输入。

clear()应该在读入之前调用bSmile。此外,这也是为什么您应该始终使用流本身的条件来检查输入是否成功的一个很好的理由。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 std::cin 读取 bool 的相关文章

  • 使用 #pragma Once 和 #ifndef 时出现 VS 2010 C++ LNK2005 错误

    1 gt Deck obj error LNK2005 class Card card card 3VCard A already defined in Card obj 1 gt PokerTester obj error LNK2005
  • 我的 std::hash for std::tuples...有什么改进吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有些人可能已经注意到 std hash 不支持元组 所以我添加了一个重载 它看起来比我到目前为止看到的解决方案 更好 有人有进一步减少这段代码的
  • 如何在 ASP.NET MVC 中将 XML 文件发送到客户端

    在 ASP NET MVC 中 我有一个数据库表 我想在某个视图页面上有一个按钮 如果某个用户单击该按钮 我的应用程序将生成包含数据库中所有行的 XML 文件 然后 应将包含 XML 的文件发送到客户端 以便用户看到下载弹出窗口 同样 我希
  • 更新 Azure Blob 上的 LastModified

    我正在移植代码以使用 C 中的 Azure 存储 SDK 传统上 我称其为更新修改文件的上次写入 修改时间 File SetLastWriteTimeUtc fileName lastWriteTimeUtc 要更新 blob 的上次修改时
  • strtok() 使用安全吗[重复]

    这个问题在这里已经有答案了 我读到了很多负面的东西strtok 有人说它已经过时 有人说它不是线程安全的 等等 那么真相是什么 我可以使用吗strtok 它是线程安全的吗 Note 我正在使用 Visual C 您可以使用它 它是标准库的一
  • 头文件中实现的函数的静态与内联

    我想到的方式inline在 C 中用于链接 作用域 我把它放在同一个篮子里extern and static对于全局对象 通常 对于在头文件中实现的函数 我的首选解决方案是将其设为静态 In Foo h static void foo Do
  • C++ 指针和对象实例化

    这有效 MyObject o o new MyObject 而这并不 MyObject o new MyObject Why 关键词new 返回一个指针 http msdn microsoft com en us library kewsb
  • 预编译头和 Visual Studio

    有没有办法设置 Visual Studio 解决方案参数 以便它只创建预编译头而不构建整个解决方案 具体来说 它是一个巨大的 C 解决方案 本身有许多项目 谢谢 仅选择 pch 创建者源文件 通常是 stdafx cpp 然后编译该文件 C
  • 如何从不同的线程访问控件?

    如何从创建控件的线程以外的线程访问控件 避免跨线程错误 这是我的示例代码 private void Form1 Load object sender EventArgs e Thread t new Thread foo t Start p
  • 选择initializer_list迭代器定义

    Why std initializer list
  • 在 .NET Core 中从 HttpResponseMessage 转换为 IActionResult

    我正在将之前在 NET Framework 中编写的一些代码移植到 NET Core 我有这样的事情 HttpResponseMessage result await client SendAync request if result St
  • QSpinBox 输入 NaN 作为有效值

    我正在尝试扩展 QSpinBox 以能够输入 NaN 或 nan 作为有效值 根据文档 我应该使用 textFromValue valueFromText 和 validate 函数来完成此操作 但我无法让它工作 因为它仍然不允许我输入除数
  • 原子存储抛出错误

    我最近升级到了 C 11 兼容编译器 并且尝试将一些代码从 boost 更新到 c 11 标准 我在使用atomic store转换一些代码时遇到了问题 这是一些简单的测试代码 似乎会引发编译器错误 int main std shared
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • 检查两个函数或成员函数指针的签名是否相等

    我编写了一些代码来检查自由函数的签名是否等于成员函数的签名等 它比较提取的返回类型和函数参数 include
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • 从 C# 调用时无法识别 Powershell 命令

    这是这个的延续Question https stackoverflow com questions 66280000 powershell object returns null 66280138 noredirect 1 comment1
  • 实体框架读取列但阻止其更新

    给定一个数据库表 其中有一列包含历史数据但不再填充 实体框架中是否有一种方法可以读取该列 但在使用相同的模型对象时防止它被更新 例如我有一个对象 public class MyObject public string CurrentData
  • 为什么 C++ 标准没有将 sizeof(bool) 定义为 1?

    Size of char signed char and unsigned char由 C 标准本身定义为 1 个字节 我想知道为什么它没有定义sizeof bool also C 03 标准 5 3 3 1 说 sizeof char s
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir

随机推荐

  • 在 MATLAB 中从数组中选择元素

    我知道在 MATLAB 中 在一维情况下 您可以选择具有索引的元素 例如a 1 5 3 返回 a 的第 1 个 第 5 个和第 3 个元素 我有一个二维数组 并且想根据我拥有的一组元组选择单个元素 所以我可能想要得到a 1 3 a 1 4
  • 我无法在 Windows 上安装 pyaudio?如何解决“错误:需要 Microsoft Visual C++ 14.0”? [复制]

    这个问题在这里已经有答案了 我有一台 Windows 10 电脑 我想安装 pyaudio 以将其与我的聊天机器人一起使用 由 chatterbot 提供支持 我尝试了两种不同的方法来安装 pyaudio 第一种方法是在命令提示符下执行此操
  • Eclipse RCP:ClassNotFoundException 或如何使其他包加载我的类

    详细信息 我正在尝试使用 Jalapeno 框架将我的 RCP 应用程序与 Cache 数据库连接起来 建立连接后 我尝试从表中获取所有数据 就像墨西哥胡椒手册中一样 if objManager null return DBClass co
  • 二叉搜索树的定义中是否允许重复键?

    我正在尝试找到二叉搜索树的定义 并且我一直在到处寻找不同的定义 有人说对于任何给定的子树 左子键小于或等于根 有人说对于任何给定的子树 右子键大于或等于根 我以前的大学数据结构书上说 每个元素都有一个键 并且没有两个元素具有相同的键 bst
  • Terraform - 我应该使用 user_data 还是 Provisioner 来引导资源?

    看来我可以使用user data使用模板文件或 远程执行 provisioner使用内联命令进行引导 那么哪一个被认为更惯用呢 你应该使用user data The 用户数据 http docs aws amazon com AWSEC2
  • 如何使用 RSAEncryption 创建带有 SHA1 摘要的 PKCS7/CMS?

    我创建了一个pkcs7块 可以自己验证 但是结果和我使用OpenSSL的伙伴不一样 我创建的p7块无法被我的伙伴验证 我们仔细检查代码 只找到c 中找不到对应项的代码 OPENSSL signInfo gt digest enc alg g
  • ASP.Net 使用什么 URL 重写器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么 android:fullBackupOnly 默认值是 false?

    In https developer android com guide topics manifest application element https developer android com guide topics manife
  • 如何避免链接多个 AsyncTask 调用?

    我必须对 Web 服务进行多次调用 但每个步骤都使用上一步中的值 因此现在我有一个巨大的 AsyncTasks 链 每个 AsyncTask 都在上一步的 AsyncTask 的 onPostExecute 中执行 这非常非常难看 而且很难
  • Perl DBIx::Class 可以覆盖从数据库检索列的方式吗?

    直到今天我才使用过 DBIx Class 所以我对它完全陌生 我不确定这是否可能 但基本上我的 SQLite 数据库中有一个表 其中有一个时间戳列 时间戳列的默认值为 CURRENT TIMESTAMP SQLite 将其存储在 GMT 时
  • 总是收到“消息”:“未经身份验证。” - Laravel 护照

    我一整天都找到了很多教程 我的设置与所有基本教程完全相同 目前 我可以访问http localhost oauth token成功地将令牌返回给我 之后 我使用 ARC Advanced Rest Client 来进行调用我自己的 api
  • 如何在SQL中获取2个表中不匹配的行?

    我有两个 SQL Server 表 CHANNELS SUBSCRIBERS 我想从中获取行CHANNELS不存在于SUBSCRIBERS在某种条件下 我尝试过INNER和OUTER LEFT JOIN但这对我不起作用 他们都给了我相同的答
  • 将一组字符串转换为 byte[] 数组

    我正在尝试将一组字符串转换为 byte 数组 首先 我执行以下操作将字节数组转换为字符串 public String convertByte byte msg String str for int i 0 i lt msg length i
  • 如何在iPhone中获取DNS服务器IP

    我尝试通过以下方式获取 etc resolv conf 打开 etc resolv conf 0644 但它返回 1并且errno是2这意味着 没有这样的文件 我能做些什么 您无法访问应用程序沙箱之外的文件
  • 反应本机错误 RCTJSONStringify() 遇到以下错误:JSON 写入中的类型无效 (NSURL)

    我正在尝试使用反应本机fbsdk在我的反应本机应用程序中 直到昨天为止都运行良好 但是 今天它给出了一个奇怪的错误RCTJSONStringify 遇到以下错误 JSON 写入 NSURL 中的类型无效 RN v0 42 0 这是我的代码
  • 从 dll 内的函数返回时堆损坏

    我有一个具有如下原型的函数 void function std string str 这个函数在另一个加载和使用该 dll 的程序的主函数中被调用 function some string value here 从该函数返回时 我收到堆损坏
  • 使用 Nokogiri 解析大型 HTML 文件

    我正在尝试解析与 Nokogiri 但不幸的是我无法从页面获取所有项目 我的简单测试代码是 require open uri require nokogiri html Nokogiri HTML open http www pro med
  • bash 中的视频方向检测

    我需要检测视频是以纵向还是横向模式录制的 然后以脚本方式将其转换为正确的方向 if v orient landscape then ffmpeg i file mp4 vf transpose 1 file ogv else ffmpeg
  • ABAP中调用方法的不同方式

    抱歉这个基本的 ABAP 问题 ABAP中调用方法有哪些不同的方式 他们的 官方 名字是什么 我听说过执行 方法调用和内部 内联方法调用 执行使用PERFORM关键字和方法调用CALL METHOD语法 我猜 但什么是 内部 或 内联方法调
  • 如何使用 std::cin 读取 bool

    我是 C 新手 我想知道函数 cin 在布尔数据的情况下如何工作 比方说 bool a cin gt gt a 我知道如果我给出 0 或 1 我的数据 a 将是 true 或 false 但是如果我给出另一个整数甚至一个字符串会发生什么 我