【问题标题】:dev-c++ print out a heart symboldev-c++ 打印出一个心形符号
【发布时间】:2022-01-26 03:17:42
【问题描述】:

我正在尝试在 dev-c++ 中打印出一个心形符号。

打印我写的心

#include <iostream>
using namespace std;
int main()
{

    char heart = 3;

    cout << "Heart = " << heart << endl;
    
    return 0;
}

但是,它不会在我的计算机上打印出心脏。我还将 ANSI 设置更改为“是”。 我的同学和教授可以看到心形符号,但我看不到:/ 有人可以帮忙吗?

【问题讨论】:

  • 看到心脏是您的操作系统终端的一项功能
  • 我用的是Windows 10,有什么办法可以看到心形符号吗?
  • 如果您想在终端上打印心形符号,您需要打印一个实际的 unicode 心形符号(例如 U+2764 ❤),并且终端必须配置为 unicode 并使用具有该符号的字体符号。
  • @Slome 告诉您的教授,互联网上的某个随机人恭敬地告诉他向您解释 ascii“文本结尾”应该如何显示为心形符号。在他将为您提供的解释期间,他可能会弄清楚为什么它在您的系统上不起作用,即使它在他的系统上运行。如果他不明白,请告诉他,互联网上的随机人告诉他 - 恭敬地 - 他需要稍微研究一下情况,然后他们会给你一个解释。
  • @Slome 您可能需要做好准备。获取相关 ANSI 或 ISO 标准的副本很难/昂贵,但wikipedia page 可能会有所帮助。那页上没有任何心形的东西。如果您的教授在位置 3 向您展示了一个带有心形的表格,请告诉他网络上的另一个随机人恭敬地说它不是 ASCII 字符的表格(无论表格本身怎么说)。它是特定 Windows 代码页的图表,并不是每个人都在 Windows 上使用相同的代码页,而且几乎没有人在 Windows 之外使用该代码页。

标签: c++ unicode dev-c++


【解决方案1】:

虽然 ASCII 代码 3 是控制字符,但默认的美国 Windows 代码页 437 和西欧 Windows 代码页 850 将在 cmd.exe 窗口中打印Heart = ♥,前提是所选字体支持它。这与为某些控制字符打印符号的旧 DOS 代码页向后兼容。您的系统可能未设置为支持它的字体,或者它是不同的代码页。使用chcp 检查代码页,使用chcp 437 更改它,并检查窗口的属性页,字体选项卡。 Consolas、Courier New 和 Lucida Console 字体都支持心脏。

C:\test>type test.cpp
#include <iostream>
using namespace std;
int main()
{
    char heart = 3;
    cout << "Heart = " << heart << endl;
    return 0;
}
C:\test>cl /nologo /EHsc /W4 test.cpp
test.cpp

C:\test>chcp
Active code page: 437

C:\test>test
Heart = ♥

屏幕截图(Consolas 字体):

在 Windows 上输出正确字符的更可靠方法是设置控制台文本模式以支持宽字符并输出正确的 Unicode 字符。这仍然需要支持 Unicode 字符的字体,在本例中为 U+2665 BLACK HEART SUIT,但不会关心 windows 支持什么代码页。

#include<fcntl.h>
#include <io.h>
#include <iostream>

int main () {
    _setmode(_fileno(stdout), _O_U16TEXT);
    std::wcout << L'\u2665' << std::endl;
}

【讨论】:

    【解决方案2】:

    代码为3 的ascii 字符是Control Character非打印字符,具体来说就是End-of-Text character

    这些字符具有特殊含义,代表书面符号,即它们不打算打印。

    某些终端被配置(或可以配置)打印控制字符(主要用于调试目的)。其中一些配置为将 EoT 字符打印为^C,其他打印为心形,而其他配置为。请查阅您的终端文档,看看是否可以根据需要进行打印。

    控制字符不应用于打印符号,也不应期望打印符号。

    如果您想在终端上打印心形符号,您需要打印一个实际的 unicode 心形符号(例如 U+2764 ❤),并且终端必须配置为 unicode 并使用具有该符号的字体。

    【讨论】:

    • 是的。我只是觉得当我的教授在他的计算机上使用我的代码时它可以工作但在我的计算机上不起作用,这很奇怪。他还想让我用 3 打印出一颗心
    • @Slome 将他指向这篇文章和 my previous comment,尽管我继续进行解释。
    • 是的,我会的。非常感谢!
    • 虽然这是处理有趣角色的正确(现代、可靠、便携、行业最先进等)方式,但正确和满足教师有时是两个相互排斥的目标。另一个答案显示了一种不正确的(过时的、不可靠的、不可携带的,无论如何)打印心形的方式,但这种方式更有可能实现第二个目标。这就是生活。
    • 我实际上觉得在这种情况下,其他答案对 OP 更有用。
    猜你喜欢
    • 2012-02-24
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 2019-04-25
    • 1970-01-01
    相关资源
    最近更新 更多