【发布时间】:2020-05-25 20:36:37
【问题描述】:
我编写了以下代码来为 C 中的卡片套装生成 Unicode 符号。它工作正常,我不需要更改字体系列或控制台的代码页(我使用 Windows 10 和 Dev-C++)但是看来我只能生成那些符号。实际上,如果我尝试其他值来生成其他符号,例如国际象棋、骰子、多米诺骨牌或其他符号,如unicode symbols for games 所示,则该代码不起作用。为什么?提前感谢您的帮助。
#include <stdio.h>
#include <fcntl.h>
#define SPADE L"\u2660"
#define CLUB L"\u2663"
#define HEART L"\u2665"
#define DIAMOND L"\u2666"
enum SUIT {spade = 1, club, heart, diamond};
void printSuit(int suitToSelect) {
_setmode(_fileno(stdout), _O_U16TEXT);
switch (suitToSelect) {
case spade:
wprintf(SPADE);
break;
case club:
wprintf(CLUB);
break;
case heart:
wprintf(HEART);
break;
case diamond:
wprintf(DIAMOND);
break;
}
_setmode(_fileno(stdout), _O_TEXT);
}
int main(void)
{
printSuit(spade);
printSuit(heart);
printSuit(club);
printSuit(diamond);
printf("\n");
printf("Normal text\n");
return 0;
}
【问题讨论】:
-
“该代码不起作用”是什么意思?它是否无法编译,或者在运行时抛出错误,或者您的意思是它可以编译并运行良好但不显示您要打印的字符?
-
它编译但生成“?”而不是符号。谢谢。
-
在这种情况下,我希望您的控制台中的字体系列没有您尝试打印的字符的字形
-
显示不起作用的代码,而不是(或附加于)起作用的代码。请注意,用 4 个十六进制数字表示的符号和用 more 表示的符号是有区别的:en.wikipedia.org/wiki/…
-
对不起,也许我还不清楚:代码编译并工作,但即使我写了它们对应的值,Unicode 符号也不会出现。可视化仅适用于卡片套装符号。例如,所有的国际象棋符号都不会出现:它们对应于值 L"\u2654"、L"\u2655"、L"\u2656"、L"\u2657"...查看此 wiki 以获取完整列表: [en.wikipedia.org/wiki/Chess_symbols_in_Unicode] (en.wikipedia.org/wiki/Chess_symbols_in_Unicode)