打印笑脸c ++

时间:2017-03-12 02:41:14

标签: c++

我正在尝试根据用户要求的次数打印笑脸(来自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;
}

2 个答案:

答案 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-8Unicode的一种非常常见的编码,许多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 characterStart 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";