我是C ++的新手。小代码示例如下:
int main(int argc, char* argv[]) {
char ch1;
int int1;
cin >> ch1;
cin >> int1;
cout << ch1 << '\n';
cout << int1 << '\n';
return 0;
}
当我运行程序并输入以下内容时:
AZ
我得到了输出:
一 32767
我理解'a'但为什么整数值为32767?我只是想测试一下,如果不是分配给int1的数值而是使用'z',会发生什么。
我尝试输入:
斧
......我也得到了相同的结果。
现在,如果我使用int int1
代替short int1
并使用输入运行程序:
AZ
我得到了输出:
一 0
P.S。
sizeof(int) = 4
sizeof(short) = 2
我使用的是64位计算机。
答案 0 :(得分:4)
当输入流无法读取有效数据时,它不会更改您传递的值。 'z'不是有效数字,因此int1保持不变。 int1没有被初始化,所以碰巧有32767的值。在读取数据后检查cin.fail()或cin.good()的值,以确保一切都按预期的方式工作。
答案 1 :(得分:1)
cin >> int1;
表示“读取整数并将其放入int1”。所以你喂它z
,它不是整数中的有效字符,它只是中止读取并留下int1
中的任何内容。
通过将int1
初始化为某事并查看会发生什么来对此进行测试。
答案 2 :(得分:0)
c ++ cin
流正在为程序进行输入验证。
从cin
流式传输到int
cin
时,只会接受有效数字的数字,-0123456789,以及INT_MIN和INT_MAX之间的值。
如果需要z
(122)的数值,我建议使用c getchar
函数而不是cin
流。
int main(int argc, char* argv[]) {
cout << "function main() .." << '\n';
char ch1 = getchar();
int int1 = getchar();
cout << ch1 << '\n';
cout << int1 << '\n';
return 0;
}
当输入az时,将输出
a
122
答案 3 :(得分:0)
直接使用 cin ,就我而言,对于我来说,读取非平凡程序中的数据是一个坏主意。我建议你阅读我给出的另一个类似问题的答案: