将 char 存储到 int 变量中

2023-12-06

我正在学习 C++ 中的隐式转换。我读了下面的例子:

char a;
std::cin>>a; //I can enter an integer like 56 here
std::cout<<a<<std::endl; //for the input 56 it will display 5 because of its ASCII value

我通过阅读不同的书籍和帖子来理解上面的例子。例如,如果我提供输入J,然后程序成功打印J在控制台上。同样,如果我提供输入说56那么输出将是5因为它的 ASCII 值。


但后来我尝试了相反的方法,如下所示:

int a;
std::cin>>a;//if i provide the input as the character J then why is the output 0 instead of the corresponding code point of `J`
std::cout<<a<<std::endl;

对于上面的代码片段,如果我提供输入56那么输出被正确打印为56。但如果我提供的输入为J那么output is 0.

所以我的问题是在上面的第二个片段中为什么代码点对应于字符J没有打印出来,而是我们得到0打印在控制台上。我是说,a是一个整型变量,因此它能够存储与字符对应的代码点J然后当我们这样做时cout<<a;我们应该将该代码点作为输出而不是0。这里发生了什么。这是否与隐式转换有关,例如char可以晋升为int或者是其他东西。


user4581301的评论指出了正确的方向。

人们需要更好地了解提取运算符(运算符>>)才能理解发生了什么。

当分配给算术类型时,只要字符序列可以准确地解释为该类型的值,就会逐个字符地解析输入。当不再可能这样做时,解析停止并使用直到该点为止获得的有效值。

因此,当只输入一个字符并将该字符的 ASCII 值赋给一个整型变量时,不存在隐式转换的问题。相反,这是一次失败,人们可以在std::num_get<CharT,InputIt>::get下面列出了链接。

如果转换函数无法转换整个字段,则 值​0​ 存储在 v 中。

以下是广泛了解该主题的好地方:

std::cin 和处理无效输入

std::istream::运算符>>

为了更深入地理解,以下链接很有用:

运算符>>(std::basic_istream)

std::basic_istream::operator>>

std::num_get::get、std::num_get::do_get

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

将 char 存储到 int 变量中 的相关文章

随机推荐

  • 非常非常长的数的模 (fmod)

    我想使用 Cpp 查找阶乘中零的数量 问题是当我使用非常大的数字时 include
  • 从帮助 ID 获取 CHM 详细信息

    我有帮助字符串 id 和一些 CHM 文件 通过帮助字符串 我想找到诸如 CHM 文件名 链接到该帮助 ID 的页面 该页面的描述 标题等详细信息 如果您有文件名和搜索条件 我有对多个 CHM 文件执行字符串搜索的所有代码 但我担心的是 只
  • rsyslog 模板 - 正则表达式解析失败

    我正在尝试在 rsyslog 服务器中构建来自 D Link DAP 2310 的日志 它具有非标准日志格式 我的想法是使用 rsyslog 模板中的正则表达式来修复该问题 当我使用 rsyslogd N1 解析 rsyslog conf
  • 如何在 gmaps4rails 中用标记显示用户的位置?

    我一直在尝试运行 gmaps4rails 的自定义使用 并且我设置了代码来在地图上显示我的 json 坐标字符串 并且用户的中心正在工作 我可以从家里 工作场所和我的位置放大到我的位置电话 一旦获得许可 我就无法让js正确地在地图上显示 我
  • 使用 XCTestCase Objective-C 进行多重测试性能

    我在测试类中有2种性能测试方法 如果我单独运行它们 它们就会通过 如果我运行洞类方法 它们会失败并显示消息 由于未捕获的异常 NSInternalInconsistencyException 而终止应用程序 原因 API 违规 多次调用 X
  • 未应用 setPolyToPoly

    谁能帮我解决我遇到的图形问题 这段代码根本不应用 setPolyToPoly 它执行相机旋转 但不执行 polyToPoly 转换 我不明白为什么 final Camera camera mCamera final Matrix matri
  • 从对象数组中返回匹配的对象

    我想根据 searchString 从给定数组中搜索匹配的值对象 例如 搜索字符串为 Object 0 var objArray id 0 name Object 0 otherProp 321 secondVal stack id 1 n
  • 无法在 Spark 中配置 ORC 属性

    我正在使用 Spark 1 6 Cloudera 5 8 2 并尝试以下方法来配置 ORC 属性 但不影响输出 下面是我尝试过的代码片段 DataFrame dataframe hiveContext createDataFrame row
  • 如何使用实体框架代码优先迁移删除唯一索引

    我正在使用启用了 Code First 迁移的 Entity Framework 5 0 我使用以下方法添加了唯一键 CreateIndex dbo Groups Name true 现在我想使用下一个迁移的 Down 方法删除现有的唯一键
  • 从资产库 URL 获取 NSData

    我正在尝试从设备库的 mp4 文件获取 NSData 这个链接看起来像这样 assets library asset asset mp4 id 32515720 939A 456F 958F 0B2F397416EB ext mp4 我试过
  • JavaScript 按钮停止页面上的所有音频

    我正在使用 mixlr com 的嵌入播放器来播放音频 现在我需要一个按钮来停止整个网站的音频 尽管播放器有自己的播放暂停按钮 但我需要自己的按钮来控制整个网站的音频 如果我单击暂停按钮 它将暂停整个网站的音频 有人可以帮我吗 一键暂停所有
  • R 中多行的一次热编码

    假设我有以下格式的数据 ID VALUE a a a b d b d c 我想做的是对 ID 值进行一次热编码 当我使用model matrix 我得到 model matrix VALUE 1 df ID aVALUE bVALUE cV
  • 使用数据库优先方法时覆盖或替换默认构造函数

    我们使用数据库优先的方法来创建 MVC 模型 这意味着框架会在主模型中自动生成默认构造函数 cs文件 然而 我想设置几个默认值 问题是这个框架每次都会为此模型生成一个基本的 cs 文件 edmx已更新 有什么方法可以在部分类中重写此构造函数
  • 使用 Maven 构建 Groovy 项目时出现源错误

    我正在尝试使用 maven 构建我的第一个 groovy 项目 但我从 maven 收到以下错误 它是某种类型的源错误 但我不明白为什么我会收到它 INFO BUILD FAILURE INFO INFO Total time 3 186s
  • IntelliJ的Scala增量编译什么时候发生?

    IntelliJ的Scala增量编译什么时候发生 我注意到对文件进行更改不会导致相应的 class 文件 在 target 中 被更新 什么时候会发生这种情况 我认为你误解了 Scala 增量编译的工作原理 有两种不同的东西可以称为 Int
  • 访问VBA:查找列中的最大数字并加1

    在我的 Access 数据库中 我有一个名为 Demande 的表 我想读取 Numero de Commande 列中的所有记录并读取该列中最大的数字 以便我可以将该数字用于下一个新记录 这是我的桌子 关键索引是针对 Numero de
  • Windows Azure 与.NET 2.0 框架兼容吗?

    我有一个在 NET 2 0 框架中开发的服务 它安装在多个站点中并与我的应用程序一起使用 我希望该服务能够向我 报告 有关该应用程序的某些信息 我想看看 Windows Azure 是否可以让我将报告存储在云数据库中 并在需要时提取它们 我
  • 重写 WinForm ListView 控件上的 Drawitem 事件

    我希望 ListView 的所选项目在焦点丢失时保持清晰可见 在 Windows 7 上为暗灰色 我确实将 HideSelection 属性设置为 False 我想对列表视图执行某人对 TreeView 控件所做的操作 即重写 Drawno
  • Kubernetes 中具有子域重定向的通配符 SSL 证书

    我已将 Kubernetes 配置为使用 cert manager 和 LetsEncrypt 对我的所有应用程序使用一个通配符 SSL 证书 现在的问题是我无法配置子域重定向 因为 Ingress 有点 僵硬 以下是我试图实现这一目标的方
  • 将 char 存储到 int 变量中

    我正在学习 C 中的隐式转换 我读了下面的例子 char a std cin gt gt a I can enter an integer like 56 here std cout lt