为什么字符'a'不会自动转换为97?

use*_*636 3 c++ integer inputstream character

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;
Run Code Online (Sandbox Code Playgroud)

我在input1写了'a',在input2写了'a'.

Ouput is like this.
input1 : a
input2 : a
a
-858993460
Run Code Online (Sandbox Code Playgroud)

我好奇......'一个'章程在十九月份是97.为什么打印-858993460?'a'不会自动转换为97?为什么?

rig*_*old 18

a,作为字符串,不能通过int以下规则转换为a std::cin.试想一下:a是不是在基地10有效的整数std::cin将无法转换字符串 "a"int.

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

尝试这样的事情:

char input2_chr;
std::cin >> input2_chr;
int input2 = input2_chr;
Run Code Online (Sandbox Code Playgroud)

  • 另外,`-858993460`只是`0xCCCCCCCC`,它是调试器分配给未初始化int的值.尝试使用发布版本,您将看到该值将发生变化(该变量不会初始化并包含之前在该内存位置的内容). (4认同)
  • @jrok您可以简单地启用例外. (4认同)
  • @sbi我是个老兄.这将是一些严重未定义的行为 (2认同)

unw*_*ind 6

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

如果您尝试读取整数,则字符"a"无效,因此>>操作员不会接受该字符.

您似乎在某种程度上期望输入应该将字符转换为该字符的ASCII代码,以便为您提供所请求的整数类型的结果.语言不支持这种推理.