c++ 为什么std cin只在与int变量一起使用时才起作用?

6jygbczu  于 2023-02-06  发布在  其他
关注(0)|答案(2)|浏览(141)

我尝试使用std::cin一段时间后。

使用uint8_tunsigned char

unsigned char data;
std::cin >> std::dec >> data;

无论是否使用std::dec,我都会得到我输入的第一个ASCII字符。如果我输入12,数据是0x31而不是12。为什么它直到255才能解析数字并存储在char中?

int data;
std::cin >> std::dec >> data;

给出正确data=12/0xC而非0x31

  • 为什么?

char[N]std::hex配合使用

char data[128];
std::cin >> std::hex >> data;

还获取ASCII字符而不是十六进制。

  • 写入0x010203040506...数据是0xFFFFFFFFF..
  • std::cin>>std::hex不能自动将我输入的字符串解析为十六进制吗?
bpzcxfmw

bpzcxfmw1#

简而言之:

  • cin >> charVar扫描stdin中的单个字符
  • cin >> intVar扫描stdin中的字符,直到输入非数字字符

解释您的观察结果:
char变量可以存储单个ASCII字符。
键入12时,仅扫描字符1
字符1的ASCII码为0x31

bxgwgixi

bxgwgixi2#

std::decstd::hex影响整数的格式。
但是对于流媒体运营商来说,char及其变体(包括uint8_t)不是整数,它们是单个字符,它们总是读取单个字符,并且从不解析整数。
这就是这些函数的定义。没有别的办法。如果你想要一个范围有限的整数,首先读入一个int(或者其他不是char变体的整数类型),然后再进行范围检查。如果你愿意,你可以在之后将它强制转换成一个小类型,但是你可能不应该这样做。char类型在数字上很难处理。
类似地,阅读char数组时读取的是字符串。(另外,如果不使用setw()来限制长度以适应现有缓冲区,则永远不要这样做。更好的是,使用std::string。)这就是它的定义。

相关问题