Вывести символ рамки char(179) - char(218) c++
Я хочу вывести красивую рамочку
╔══╗
║ ║
║ ║
╚══╝
Такой вывод
cout << char(186);
работает, но такой
cout << "║" << ' ' << '║';
нет, а хотелось бы. Вместо этого выводит
тХС 14849425
Подскажите пожалуйста как правильно хранить и выводить такие символы, чтоб можно было сделать так
string s[3] = {"╔═╗",
"║ ║",
"╚═╝"};
for (auto t : s)
cout << t << endl;
Я использую Codeblocks.
Ответы (3 шт):
Для того, что бы сделать это, нужно поменять кодировку командной строки (по умолчанию, код кодировки в консоли - это cp866), так как, то, какие символы выводятся зависит от кодировки. Кодировка символов "рамочки" - это UTF-8 (UTF-8 имеет номер 65001). Поэтому надо поменять кодировку на соответствующую.
#include <iostream>
using namespace std;
string s[3] = {"╔═╗",
"║ ║",
"╚═╝"};
int main(){
system("@echo off\nchcp 65001"); //Отключаем вывод команд консоли и меняем кодировку
for (string t : s)
cout << t << endl;
}
Работать надо в 866 кодировке, и код писать соответственно...
Вот, убедитесь сами:
Еще раз: и код (текст программы) написан в 866 кодировке, и вывод в консоль в ней же (по умолчанию).
Ну, а если хотите увидеть весь набор псевдографики, то опять же просто выведите в консоль такое:
for(unsigned char c = 0xA0; c < 0xF0; ++c)
{
cout << (char)c ;
}
Вот что увидите:
абвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюя
Если, конечно, в кодировке 866...
Насколько я понял, проблема была в том, как Codeblocks кодирует .cpp файлы.
Зайдя в Settings -> Editor -> General settings -> Encoding settings и выставив такие параметры :

всё заработало и теперь спокойно выводит и рамки и русский текст.
