Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么字符是';a';不自动转换为97?_C++_Integer_Character_Inputstream - Fatal编程技术网

C++ 为什么字符是';a';不自动转换为97?

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年12月的。为什么它会打印-858993460?
“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