为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

2024-03-09

一小段代码让我发疯,但希望你能阻止我跳出窗外。看这里:

#include <iostream>
#include <cstdint>

int main()
{
    int8_t i = 65;
    int8_t j;

    std::cout << "i = " << i << std::endl; // the 'A' is ok, same as uchar

    std::cout << "Now type in a value for j (use 65 again): " << std::endl;
    std::cin >> j;
    std::cout << "j = " << j << std::endl;

    if (i != j) 
        std::cout << "What is going on here?????" << std::endl;
    else 
        std::cout << "Everything ok." << std::endl;

    return 0;
}

如果我使用int代替int8_t一切还好。我需要这个 8 位unsigned integers,不是更大。顺便说一句。和unsigned char当然,这是相同的行为int8_t.

有人有提示吗?


int8_t是具有所需特征的整数类型的 typedef:纯 2 的补码表示、无填充位、大小恰好为 8 位。

对于大多数(也许是所有)编译器来说,这意味着它将成为以下类型的 typedefsigned char.(由于该术语的定义中有一个怪癖有符号整数类型,它不能是普通的 typedefchar, 即使char碰巧已签名)。

The >>运算符特殊对待字符类型。读取字符读取单个输入字符,而不是表示某个十进制整数值的字符序列。所以如果下一个输入字符是'0',读取的值将是特点 value '0',大概是 48。

Since a typedef为现有类型创建别名,而不是新的不同类型,因此无法>>操作员知道您想要治疗int8_t作为整数类型而不是字符类型。

问题在于,在大多数实现中,不存在不是字符类型的 8 位整数类型。

唯一的解决方法是读入int变量,然后转换为int8_t(如果需要的话可以进行范围检查)。

顺便,int8_t is a signed类型;对应的无符号类型是uint8_t,其范围为 0..255。

(还有一个考虑因素:如果CHAR_BIT > 8,这是标准允许的,那么两者都不是int8_t nor uint8_t将会被定义。)

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

为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复] 的相关文章

  • Python 的局限性是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我花了几天时间阅读有关 C 和 Python 的内容 发现 Python 非常简单且易于学习 所以我想知道它真的值得花时间学习吗 或者我应该花时
  • 更改 botframework Formflow 中的确认选项

    我在 botframework 中创建了一个表单流 我想更改确认选项 默认情况下需要 是 和 否 但我希望它继续进行 而不是 是 即使用户输入 确定 是 是 等 我如何添加确认选项 您需要将新条款添加到YesFormBuilder 配置的数
  • 用于列表和映射的 C++ 容器

    我们有一个键和值对的集合 我们需要一个容器 它可以帮助我们检索值 o 1 但也可以记住插入顺序 以便当我们进行迭代时 我们可以像插入顺序一样进行迭代 由于键是一个字符串 我们将无法使用集合或类似的结构 目前我们已经定义了自己的集合类 其中包
  • 以编程方式最大化屏幕一半的窗口

    我想最大化屏幕左侧的随机窗口 我可以在我的代码中使用 Windows Aero 函数吗 这个窗口can像用鼠标一样最大化 我只想以编程方式做到这一点 I use C 我可以得到IntPtr窗户的 如果可能的话 不要伪造鼠标或键盘输入 这可以
  • 如何在命名管道 (mkfifo) 上执行非阻塞 fopen?

    如果我有一个程序使用 mkfifo 创建并尝试打开命名管道 如何在不阻塞的情况下打开管道进行读取或写入 具体来说 我正在编写一个 C 程序 它可以在有或没有 GUI 的情况下运行 用 Java 编写 在 C 程序中 我使用 mkfifo 成
  • 如何在 CUDA 中执行多个矩阵乘法?

    我有一个方阵数组int M 10 以便M i 定位第一个元素i th 矩阵 我想将所有矩阵相乘M i 通过另一个矩阵N 这样我就收到了方阵数组int P 10 作为输出 我看到有不同的可能性 分配不同元素的计算M i 到不同的线程 例如 我
  • 正则表达式,获取两个关键字之间的整个字符串

    我正在做一些输出解析 我需要从两个单词之间抓取一大块文本 例如 如果我正在解析文本 Hi this is an example 我希望能够指定我的两个单词是 Hi 和 example 然后我将取回字符串 this is an 我知道正则表达
  • 这个具有多个值(变量)的 return 语句如何工作? [复制]

    这个问题在这里已经有答案了 我试图了解 C 函数中按值传递和返回是如何发生的 我发现一段代码如下 include
  • 在 Silverlight 中编辑并继续?

    Edit And Continue 是我最喜欢的调试工具之一 我之前曾在基于 C 的 Winforms 和 ASP NET 项目中使用过它 但是 我在 VS 2008 上运行 Silverlight 3 0 应用程序 每当我尝试进行更改 中
  • 设置 C# 可选参数的默认值

    每当我尝试将可选参数的默认值设置为资源文件中的某些内容时 我都会收到以下编译时错误 message 的默认参数值必须是编译时常量 有什么方法可以改变资源文件的工作方式来实现这一点吗 public void ValidationError s
  • 为什么无法在 android 中包含 iostream?

    已安装 android ndk r7 并尝试编译 cpp 文件 include
  • 将文本文件与 C# 中的文本模式进行比较?

    我将文本文件与类似的模式进行了比较 它正在将整行写入日志 如下所示 insert into depdb fin quick code met 但我需要单独写这个depdb或者depdb fin quick code met 即 我只需要这个
  • 在下载的同时从 UnityWebRequest 获取数据?

    我有这段代码可以进行 REST 调用 public IEnumerator GetCooroutine string route string finalURL URL route UnityWebRequest www UnityWebR
  • 推导具有两个以上参数的 std::function

    我想知道为什么std function http en cppreference com w cpp utility functional function只知道有两个参数的函数 我已经编写了一些运行良好的代码 但存在许多限制 欢迎任何反馈
  • 静态、非成员或静态非成员函数?

    每当我有一些 实用 方向的功能时 我最终都会想知道哪个选项是最好的 例如 在我正在工作的上下文中打印消息结构 自己的或外部的 一些编码 解码代码或一些有用的转换函数 我想到的选项是 1 辅助类 结构中的静态函数 struct helper
  • 编译器如何解析在变长数组之后声明的变量的地址?

    假设我有以下函数 它使用可变长度数组 void func int size int var1 int arr size int var2 编译器如何确定地址var2 我能想到的唯一方法就是放置arr after var1 and var2
  • __get_cpuid 的可移植性如何?

    我在用着 get cpuid 获取有关的信息x86 and x86 64我的程序运行的处理器 在 Linux 和 Mac OS 上使用 GCC 似乎可以在不包含任何头文件的情况下编译和运行 但是它的可移植性如何 它可以与其他编译器一起使用吗
  • VB.NET 相当于 C# var 关键字 [重复]

    这个问题在这里已经有答案了 是否有与 C 等效的 VB NETvar关键词 我想用它来检索 LINQ 查询的结果 选项推断 http msdn microsoft com en us library bb384665 aspx必须是on为了
  • REQ/REP 模式中的 ZeroMQ FiniteStateMachineException

    我有两个简单的组件 它们应该使用 REQ REP ZeroMQ 模式相互通信 服务器 REP Socket 是使用 pyzmq 在 Python 中实现的 import zmq def launch server print Launchi
  • EF,Code First - 如何在插入时设置自定义 Guid 标识值

    在处理在数据库中插入新实体时 我面临以下问题Guid作为主键 代码优先的 EF 5方法 我知道有很多类似的主题 因为我为此问题运行了几个小时 但我找不到与此问题相关的主题 举个例子 我的 POCO 类是 public class Entit

随机推荐

  • 如何每天自动备份Firestore数据库

    我想每天备份 Firestore 数据库 我的数据结构是这样的 usersCollection uid defaultCurrency USD name something dreamsCollection name image 我看过fi
  • 压倒一切!重要的风格

    标题几乎概括了这一点 外部样式表有以下代码 td EvenRow a display none important 我尝试过使用 element style display inline and element style display
  • NetworkStream 正在读取不应该存在的数据

    我在 NetworkStream 从套接字缓冲区读取不应该存在的数据时遇到问题 顺便说一句 我正在发送非常大的缓冲区 现在我刚刚在本地主机上进行测试 这是我读取数据的方式 前 4 个字节包含消息的长度 然后我只读取 4096 个块 直到达到
  • 如何配置 husky pre-push hook 来运行测试

    我正在尝试配置 husky 预推送挂钩以在推送之前运行测试 一切看起来都很好 跑完后git push origin钩子被触发并且测试正在运行 问题是 当测试完成后 即使操作成功 推送也会被冻结 并且没有其他事情发生 包 json scrip
  • SQL Server - 列顺序重要吗?

    在性能和优化方面 在 SQL Server 中构建表时 列的排列顺序重要吗 我的主键是第一列有什么关系吗 构建多字段索引时 列是否相邻有关系吗 Using ALTER TABLE syntax is it possible to speci
  • 正则表达式匹配 img 标签中的任何 url

    我需要一个可以匹配 img src 标签中任何 url 的正则表达式 URL 可以是 images temp jpg 或 temp1 jpg 甚至 http www example com temp jpg i 123 或其他任何内容 我写
  • 使用带参数的资源文件

    我的问题是关于 c 中的资源文件 resx 字符串 部分 我用它来存储我的消息 我想知道如何使用带参数的资源条目的 值 例子 名称 显示单元格值 值 单元格上的值 和行 是 我想填写 具有不同值的参数 谢谢你 您可以对资源文件中存储的字符串
  • 确保 Spring Quartz 作业执行不重叠

    我有一个 Java 程序 每 20 秒从 Spring Qquartz 执行一次 有时只需要几秒钟即可执行 但随着数据变大 我确信它会运行 20 秒或更长时间 当一个实例仍在执行时 如何防止 Quartz 触发 触发作业 解雇两个在数据库上
  • 在两个视图控制器之间进行 Segue

    在我的故事板 如上所示 上 我有一个 ViewController 它包含一个带注释的 MKMapView 这些注释包含一个公开图标 点击该图标时 应该将用户导航到另一个 ViewController 为此 我在视图控制器之间创建了一个推送
  • 有没有办法评估带有液体标签的字符串

    我需要提供页面内容参考列表 它应该包含页面上各部分的参考 我能看到的唯一方法是使用page content并解析它 但我偶然发现了数据评估的问题 例如我可以从page content site data sdk language SDK但没
  • Java 中比较版本字符串的有效方法[重复]

    这个问题在这里已经有答案了 可能的重复 如何比较 Java 中的两个版本字符串 https stackoverflow com questions 198431 how do you compare two version strings
  • Delphi解析xml文件

    首先 我对编码和 Delphi 很陌生 已经断断续续使用了几个月了 下面是一个示例 xml 文件 我想要实现的是解析 xml 文件的每个 名称 部分中的所有数据 我以前从未这样做过 一些指导将不胜感激 我在这里看过与此类似的其他问题 但我无
  • 在 Google Apps 脚本中异步运行函数

    我正在制作一个调用 GAS 函数的 Slack 机器人 一切正常 只是 Slack 显示错误消息 因为它在调用 API 时只等待 3 秒响应 任何人都可以帮助我弄清楚如何异步运行 everyDay2 以便我可以在完成之前返回响应 我尝试过
  • Vue/nuxt - 如何从子组件访问父级引用

    我有一个全局确认模式组件 已在我的默认布局文件中注册 然后 我会尝试从 page index vue 访问它 但调用 this refs 只会返回一个空对象 将模式组件放在我的pages index vue 中会起作用 但它会破坏我的全局确
  • 如何通过全客户端实施来保护 Firebase?

    我有一个非常简单的 Firebase 应用程序 所有操作都在客户端通过 JavaScript 进行读取和写入 我这边没有用户帐户或服务器端应用程序 现在 任何查看我的 JavaScript 的人都可以复制我的 Firebase URL 并拥
  • 计算相对于某个根的路径 - Path.Combine 的逆

    有没有可靠的方法来计算 Path Combine 的逆 Path Combine c folder subdirectory something txt 可能会返回类似 c folder subdirectory something tex
  • PHP:将类的所有函数包装在子类中

    使用 PHP 库类 我想将其所有公共函数包装在一个子类中 大致如下 class BaseClass function do something some stuff function do something else other stuf
  • 如何在堆栈导航器(react-navigation 2.X)中卸载以前安装的组件?

    这是我的应用程序的简化流程 login 主页 有彩色图表或创建图表的选项 colorInDiagram 用户为图表的各个部分着色 付款 主页 返回主页 现在 在此之后 如果用户决定再次为图表着色 他 她将从主页中选择该特定选项 并且流程将照
  • 此 NSPersistentStoreCoordinator 没有持久存储(架构不匹配或迁移失败)。无法执行保存操作

    我正在开发一个使用 x x xcdatamodel 的应用程序 现在 在同一个 x x xcdatamodel 中 我在其中一个实体中添加了一个属性 应用程序崩溃 显示消息 此 NSPersistentStoreCoordinator 没有
  • 为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

    这个问题在这里已经有答案了 一小段代码让我发疯 但希望你能阻止我跳出窗外 看这里 include