要使用printf
,并假设您使用美国本地化的Windows,控制台代码页为437(运行chcp
进行检查),那么如果将源文件保存在代码页437中,以下更正的代码将起作用。方法是使用Notepad ++并在菜单上设置Encoding->Character sets->Western European->OEM-US
。这样做的缺点是你的源代码在大多数编辑器中不能很好地显示,除非它们特别支持cp437,甚至Notepad ++在没有再次设置编码的情况下重新打开文件时不能正确显示它。
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <fcntl.h>
int main()
{
char pos[9] = {'X','O','X','O','X','O','X','O','X'};
printf(" %c ║ %c ║ %c \n", pos[0], pos[1], pos[2]);
printf("═══╬═══╬═══\n");
printf(" %c ║ %c ║ %c \n", pos[3], pos[4], pos[5]);
printf("═══╬═══╬═══\n");
printf(" %c ║ %c ║ %c \n", pos[6], pos[7], pos[8]);
system("pause"); system("pause");
}
在Windows上,因为API是本地UTF-16,更好的方法是使用下面的代码,将文件保存为UTF-8 W/BOM:
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <fcntl.h>
int main()
{
char pos[9] = {'X','O','X','O','X','O','X','O','X'};
_setmode(_fileno(stdout), _O_U16TEXT);
wprintf(L" %C ║ %C ║ %C \n", pos[0], pos[1], pos[2]);
wprintf(L"═══╬═══╬═══\n");
wprintf(L" %C ║ %C ║ %C \n", pos[3], pos[4], pos[5]);
wprintf(L"═══╬═══╬═══\n");
wprintf(L" %C ║ %C ║ %C \n", pos[6], pos[7], pos[8]);
system("pause");
}
输出(包括例如:
X ║ O ║ X
═══╬═══╬═══
O ║ X ║ O
═══╬═══╬═══
X ║ O ║ X
Press any key to continue . . .
@CodyGray不太清楚你的意思..那些字符和我用的完全一样.. –
啊,不要紧。什么是您的控制台的字体设置为?什么是您的系统(ANSI)代码页?请注意,您实际上并未打印Unicode字符; Windows中的Unicode始终是两个字节的UTF-16格式('wchar_t')。但是由于您使用的是IBM PC字符集中的字符,因此您可能可以使用窄字符。 –
问题是你的输出设备,而不是代码太多。 – chux