要使用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