C++ 为什么字符是';a';不自动转换为97?
我很好奇……“a”宪章是97年12月的。为什么它会打印-858993460?C++ 为什么字符是';a';不自动转换为97?,c++,integer,character,inputstream,C++,Integer,Character,Inputstream,我很好奇……“a”宪章是97年12月的。为什么它会打印-858993460? “a”是否不会自动转换为97?为什么?我认为输入失败了,您看到的值是未定义行为的结果(input2从未写入) 如果尝试读取整数,则字符“a”无效,因此>运算符不会接受它 您似乎希望输入将字符转换为该字符的ASCII码,以便获得所需的整数类型的结果。该语言不支持这种推理。a作为一个字符串,根据下面的规则std::cin不能转换为int。考虑这一点: A不是基10中的有效整数。code>std::cin将无法将字符串“a”
“a”是否不会自动转换为97?为什么?我认为输入失败了,您看到的值是未定义行为的结果(
input2
从未写入)
如果尝试读取整数,则字符“a”无效,因此>
运算符不会接受它
您似乎希望输入将字符转换为该字符的ASCII码,以便获得所需的整数类型的结果。该语言不支持这种推理。
a
作为一个字符串,根据下面的规则std::cin
不能转换为int
。考虑这一点:<代码> A<代码>不是基10中的有效整数。code>std::cin将无法将字符串“a”
转换为int
它打印-858993460
的原因是int
未初始化,因此它可以打印任何内容,也可以不打印任何内容,或者执行任何需要的操作(查找未定义的行为)
请尝试以下方法:
Ouput is like this.
input1 : a
input2 : a
a
-858993460
因为您正在输入2处读取一个整数<代码>a不是整数。因此,不会读取任何内容,并且将保持
input2
的原始值
在这种情况下,它将是一些随机值,因为input2
未初始化
您可以通过检查
cin.good()
来检查读取是否成功。在第一个步骤中,您要求输入一个字符,因此获得了第一个字符
流中的非空白字符。第二,你要求
输入一个整数,因此流跳过空白(就像它总是使用
>
)并尝试分析整数。由于“a”
不能是
开始一个整数值时,流设置一个错误状态(
failbit
)并返回,不修改input2
。当你输出
对于未初始化的变量,您有未定义的行为。(你应该
在未首先检查
输入成功与否。)
从您描述的内容来看,听起来好像您正在尝试输入一些
二进制格式。为此,必须以二进制模式打开流,
确保它充满了“C”
语言环境,然后使用
istream::get
或istream::read
。(当然,你必须知道
二进制格式是您正在读取的,以便能够
将读取的未格式化字节转换为实际信息
需要),例如,在C++标准中,你看到一个任意的原始值,称为<强>不确定值< /强>,因为输入操作失败,并且<代码>输入2>代码>没有被分配新的值。
要输出char
变量值的十进制表示形式,只需将其转换为int
,以便将输出流作为整数处理
将其转换为int
的最简单方法是通过在表达式中使用变量来鼓励隐式提升,例如只需在其前面添加一个+
符号:
char input2_chr;
std::cin >> input2_chr;
int input2 = input2_chr;
#包括
使用名称空间std;
int main()
{
char const ch='a';
cout@LuchianGrigore我假设OP表示字符literal'a'
,使用ASCII。检查这个答案:使用流时需要遵循一个非常简单的规则:总是在使用值之前检查输入是否成功。你失败了,因此结果很有趣。-858993460
只是0xcccc
which是调试器分配给未初始化int的值。尝试使用发布版本,您将看到该值将发生更改(变量不会初始化,并且包含以前在该内存位置的内容).@sbi我是个花花公子。那将是一些严重的不确定因素behaviour@Let_Me_Be为什么解析int失败不是一个例外情况?从函数int parse\u int(string)返回什么
如果转换失败?@恕我直言,你是认真地说错误代码比异常好。或者更好,是失败状态。@jrok你可以简单地启用异常。不是未定义的行为
,但该值有一个不确定状态
,因为它从未设置。现在访问一个不确定状态的值te是未定义的行为。
char input2_chr;
std::cin >> input2_chr;
int input2 = input2_chr;
#include <iostream>
using namespace std;
int main()
{
char const ch = 'a';
cout << "'" << ch << "' = " << +ch << endl;
}
'a' = 97