我正在尝试根据用户要求的次数打印笑脸(来自ascii),但在控制台输出屏幕上,它只显示一个正方形,其中有一个正方形。我哪里出错?
#include <iostream>
using namespace std;
int main()
{
int smile;
cout << "How many smiley faces do you want to see? ";
cin >> smile;
for (int i = 0; i < smile; i++)
{
cout << static_cast<char>(1) << "\t";
}
cout << endl;
return 0;
}
答案 0 :(得分:5)
ASCII没有笑脸(所以在ASCII中你会:-)
,你希望你的读者理解这是一个笑脸)。但是Unicode有几个,例如☺(white smiling face, U+263A);请参阅http://unicodeemoticons.com/或http://www.unicode.org/emoji/charts/emoji-list.html以查找其中一个很好的表格。
2017年,使用UTF8 everywhere (在终端和输出中)是合理的。 UTF-8是Unicode的一种非常常见的编码,许多Unicode字符在UTF-8中用几个字节编码。
因此,在使用UTF8的终端中,字体中包含许多字符,因为☺是UTF8编码为"\342\230\272"
,请使用:
for (int i = 0; i < smile; i++)
{
cout << "\342\230\272" << "\t";
}
2017年,大多数&#34;控制台&#34;是terminal emulators,因为真正的terminals - 像神话VT100 - 今天在博物馆中,你至少可以配置这些终端模拟器使用UTF-8编码。在许多操作系统(特别是大多数Linux发行版和MacOSX)上,默认情况下它们使用的是UTF-8。
如果你的C ++ 11编译器接受字符串中的UTF8(和UTF8源文件),就像今天大多数人一样,你的源代码中甚至可以有"☺"
。要键入,您通常会使用来自外部源的一些复制和粘贴技术。在我的Linux系统上,我经常使用一些字符映射实用程序(例如在终端中运行charmap
)来获取它们。
在ASCII中,代码1的字符是control character,Start Of Heading。也许你将ASCII与CP437混淆,后者不再使用(但是在20世纪80年代编码的代码1是笑脸)。
您需要使用Unicode并理解它。今天,在2017年,您无法承受外部使用其他编码(它们是博物馆的历史遗产)。当然,如果您使用奇怪的字符,您应该记录您的程序用户应该使用某些字体(但终端仿真器中使用的大多数常见字体都接受Unicode的很大一部分,因此这在实践中不是问题)。但是,在我的Linux计算机上,许多字体缺少U+1F642 Slightly Smiling Face(例如,在C ++程序中为"\360\267\231\202"
),2014年仅出现在Unicode7.0中。
答案 1 :(得分:0)
只需在Visual Studio代码中执行此操作:
for print;
cout<<"\2";