在Stroustrup编程的第3.9.1节“安全转换”中,他有代码来说明从int到char的安全转换。
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
char c='x';
int i1=c;
int i2='x';
char c2 = i1;
cout << c <<'<< i1 << ' << c2 << '\n';
return 0;
}
应该将x 120 x
打印到屏幕上。
然而,我无法让它工作,我不知道为什么。我得到的结果是x1764834364x
。
我也收到3个警告(在Xcode 6.3.1中)。
是什么导致这种情况?
答案 0 :(得分:3)
我想添加一些可能对类似情况的人有用的相关信息:
当您使用单引号打印比字符更长的内容时,您会得到如此奇怪的输出。例如:
cout << 'a'<<' '<<'a'; // output will be something like: a538946288a
另一方面单引号单引号:
cout << 'a'<<' '<<'a'; // output will be: a a
如果您想提供多个空格字符,可以使用双引号。
在您的代码中:
int main()
{
char c='x'; // c is character 'x'
int i1=c; // i1 is its integer value
int i2='x'; // i2 has the integer value but it`s never used
char c2 = i1; // c2 is the character 'x'
cout << c <<" "<< i1 <<" "<<c2 << '\n'; // should print: x 120 x
// By using double quotes you may enter longer spaces between them
// vs. single quotes puts only a single space.
return 0;
}
答案 1 :(得分:3)
问题在于:
'<< i1 << '
编译器会给你一个警告(至少是gcc):
警告:字符常量对于其类型
太长
它认为您正在尝试显示单个char
(撇号之间的内容),但实际上您正在传递多个char
。您可能只想添加空格,例如
' ' << i1 << ' '