Вывести символ рамки char(179) - char(218) c++

Рейтинг: 0Ответов: 3Опубликовано: 30.04.2023

Я хочу вывести красивую рамочку

  ╔══╗  
  ║  ║  
  ║  ║  
  ╚══╝  

Такой вывод

cout << char(186);

работает, но такой

cout << "║" << ' ' << '║';

нет, а хотелось бы. Вместо этого выводит

тХС 14849425  

Подскажите пожалуйста как правильно хранить и выводить такие символы, чтоб можно было сделать так

string s[3] = {"╔═╗",
               "║ ║",
               "╚═╝"};
    
for (auto t : s)
    cout << t << endl;

Я использую Codeblocks.

Ответы

▲ 1

Работать надо в 866 кодировке, и код писать соответственно...

Вот, убедитесь сами:

введите сюда описание изображения

Еще раз: и код (текст программы) написан в 866 кодировке, и вывод в консоль в ней же (по умолчанию).

Ну, а если хотите увидеть весь набор псевдографики, то опять же просто выведите в консоль такое:

for(unsigned char c = 0xA0; c < 0xF0; ++c)
{
    cout << (char)c ;
}

Вот что увидите:

абвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюя

Если, конечно, в кодировке 866...

▲ -1

Для того, что бы сделать это, нужно поменять кодировку командной строки (по умолчанию, код кодировки в консоли - это 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;
}
▲ -1

Насколько я понял, проблема была в том, как Codeblocks кодирует .cpp файлы. Зайдя в Settings -> Editor -> General settings -> Encoding settings и выставив такие параметры : параметры

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