Windows — символы C ++ Unicode в консоли, используя printf?

Мой код:

#include <iostream>
#include <windows.h>

using namespace std;

int pos[9];

int main() {
printf(" %c ║ %c ║ %c ", pos[0], pos[1], pos[2]);
printf("═══╬═══╬═══");
printf(" %c ║ %c ║ %c "), pos[3], pos[4], pos[5];
printf("═══╬═══╬═══");
printf(" %c ║ %c ║ %c "), pos[6], pos[7], pos[8];
system("pause");
}

Мой консольный вывод:

Приставка

Я знаю, что есть и другие способы сделать это, но цель заключалась в том, чтобы добиться этого с помощью printf: | Есть идеи?

-1

Решение

Использовать 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 с 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 . . .
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector