【问题标题】:uint8_t does not take two digit inputsuint8_t 不接受两位数输入
【发布时间】:2023-04-08 13:13:01
【问题描述】:

这是我的测试代码

#include<iostream>
using namespace std;
int main() 
{
    uint8_t a;
    while(1)
    {
        cin>>a;
        if(a == 0) break;
        cout<<"Input is "<<a<<endl;
    }
}  

当我执行(使用我的输入)时,这就是我得到的

1
Input is 1
2
Input is 2
12
Input is 1
Input is 2
0
Input is 0
3  
Input is 3

问题 1:它将输入 12 作为两个单独的输入

问题 2:如果 a==0 不起作用的条件

可能有什么问题?

【问题讨论】:

  • 简短回答:是的,这是规范中的一个错误:(

标签: c++ uint


【解决方案1】:

uint8_ttypedef 对应于 unsigned char。这意味着将从cin 读取一个字符。

读取"0" 时,实际上是字符'0' 的ascii 值,通常为48,不为零,因此相等性检查失败。

【讨论】:

  • 感谢您的信息。我想知道我们是否有任何数据类型来存储小数字。
  • @neeradkumar,您可以使用uint8_t 存储小数字,但不能使用cin 读取它。
  • 我想在我的代码中从 cin 中读取数字。我想我可以将输入输入到 int 中,然后将其等于 uint8_t ?
  • 是的,但是在分配之前检查读取的uint16_tint 的值是否适合uint8_t
  • uint8_t v = static_cast&lt;uint8_t&gt;(i); 其中i 的值是uint8_t 的有效值 (0 - 255)。
【解决方案2】:

uint8_tchar 相同,因此尝试从 cin 中提取一个可能只会为您提供下一个要输入的字符。

然后,要接收的值不是字符转换为 int,而是输入的 ascii 值。当您键入 0 时,您将获得 ascii \0 而不是 int 零,因此不会触发您对零的测试。试试if( a == '0') 看看我的意思。

【讨论】:

  • 感谢您的回复。 if( a == '\0') 不起作用。但是 if(a == 48) 有效
  • 我的错。应该是if(a == '0')。更新了我的答案。
猜你喜欢
  • 2021-12-20
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多