为什么字符'a'没有自动转换为 97?

Why is character 'a' not converted to 97 automatically?

本文关键字:转换 字符 为什么      更新时间:2023-10-16
char input1;
std::cout << "input1 : ";
std::cin >> input1;
int input2;
std::cout << "input2 : ";
std::cin >> input2;
std::cout << input1 << std::endl;
std::cout << input2 << std::endl;
return 0;

我在input1上写了"a",在input2上写了"a"。

Ouput is like this.
input1 : a
input2 : a
a
-858993460

我很好奇...'a'宪章是 97 十二月。 为什么它打印 -858993460? "a"不会自动转换为 97?为什么?

a作为字符串,不能按照以下规则转换为intstd::cin。请考虑一下:a不是以 10 为基数的有效整数。std::cin将无法将字符串"a"转换为int

它打印-858993460的原因是因为int没有初始化,所以它可以打印任何东西,或者什么都不打印,或者做任何它想做的事情(查找未定义的行为)。

请尝试以下操作:

char input2_chr;
std::cin >> input2_chr;
int input2 = input2_chr;

我认为输入只是失败了,你看到的值是未定义行为的结果(input2从未被写入)。

如果尝试读取整数,则字符"a"无效,因此>>运算符不会接受该字符。

您似乎以某种方式期望输入应将字符转换为该字符的 ASCII 代码,以便为您提供请求的整数类型结果。该语言不支持此推理。

在第一个中,你要求输入一个字符,所以你得到了第一个 流中的非空格字符。 在第二个中,你要求 输入一个整数,以便流跳过空格(就像它总是这样做一样>>),并尝试解析整数。 由于"a"不能是 整数值的开始,流设置错误状态(failbit) 并返回,修改input2。 输出时 未初始化的变量,您具有未定义的行为。 (你应该切勿使用您输入的变量,除非首先检查 输入成功与否。

从您的描述来看,听起来您正在尝试输入一些 二进制格式。 为此,您必须以二进制模式打开流, 确保它充满了"C"区域设置,然后使用istream::getistream::read. (当然,你必须知道什么 二进制格式是您正在阅读,以便能够 将您读取的未格式化字节转换为您实际的信息 需要。

例如,Aardvard 已经回答过,您会看到一个任意的原始值,在C++标准中称为不确定值,因为输入操作失败并且input2没有被分配新

要输出char变量值的十进制表示形式,只需将其转换为int即可将输出流定向为整数。

将其转换为int的最简单方法是通过在表达式中使用变量来鼓励隐式提升,例如只需在其前面添加一个+符号:

#include <iostream>
using namespace std;
int main()
{
char const  ch  = 'a';
cout << "'" << ch << "' = " << +ch << endl;
}

输出:

"a" = 97

因为你正在读取一个整数 input2.a不是整数。因此,不会读取任何内容,并且将保留input2的原始值。

在这种情况下,它将是某个随机值,因为input2未初始化。

您可以通过检查cin.good()来检查读取是否成功