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
我好奇......'一个'章程在十九月份是97。为什么打印-858993460? 'a'不会自动转换为97?为什么呢?
答案 0 :(得分:18)
a
,作为字符串,不能通过以下规则int
转换为std::cin
。请注意:a
不是基数为10的有效整数。std::cin
无法将字符串 "a"
转换为int
。
它打印-858993460
的原因是因为int
未初始化,所以它可以打印任何内容,或者什么都不打,或者做任何想做的事情(查找未定义的行为)。
尝试这样的事情:
char input2_chr;
std::cin >> input2_chr;
int input2 = input2_chr;
答案 1 :(得分:6)
我认为输入完全失败了,您看到的值是未定义行为的结果(input2
从未被写入)。
如果您尝试读取整数,则字符“a”无效,因此>>
运算符不会接受该字符。
您似乎在某种程度上期望输入应该将字符转换为该字符的ASCII代码,以便为您提供所请求的整数类型的结果。语言不支持这种推理。
答案 2 :(得分:3)
在第一个中,你要求输入一个字符,所以你得到了第一个字符
流中的非空白字符。在第二个,你问
输入一个整数,因此流会跳过空格(就像它一直一样
>>
)并尝试解析整数。由于"a"
不能成为。{1}}
开始一个整数值,流设置一个错误状态(
failbit
)并返回,没有修改input2
。当你输出
未初始化的变量,您有未定义的行为。 (你应该
从不使用您输入的变量而不先检查是否
输入成功与否。)
根据您的描述,听起来您正在尝试输入一些内容
二进制格式。为此,您必须以二进制模式打开流,
确保它充满了"C"
语言环境,然后使用
istream::get
或istream::read
。 (当然,你必须知道什么
二进制格式是您正在阅读,以便能够
将您读取的未格式化字节转换为您的实际信息
所需要的。)
答案 3 :(得分:3)
例如Aardvard already has answered,您在C ++标准中看到一个名为 indeterminate value 的任意原始值,因为输入操作失败并且input2
未分配新值。< / p>
要输出char
变量值的十进制表示,只需将其转换为int
,以指示输出流视为整数。
将其转换为int
的最简单方法是通过在表达式中使用变量来鼓励隐式提升,例如只需在前面添加+
符号它:
#include <iostream>
using namespace std;
int main()
{
char const ch = 'a';
cout << "'" << ch << "' = " << +ch << endl;
}
输出:
'a' = 97
答案 4 :(得分:2)
因为您正在读取input2处的整数。 a
不是整数。因此,不会读取任何内容,并且将保留input2
的原始值。
在这种情况下,它将是一些随机值,因为input2
未初始化。
您可以通过选中cin.good()