0

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

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

Такой вывод

cout << char(186);

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

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

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

тХС 14849425  

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

string s[3] = {"╔═╗",
               "║ ║",
               "╚═╝"};

for (auto t : s) cout << t << endl;

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

3 Answers3

1

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

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

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

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

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

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

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

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

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

Harry
  • 221,325
-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; }

Igen
  • 61
  • Как раз в 866 кодировке все это есть... – Harry Apr 30 '23 at 20:35
  • @Harry, я понял, я еще не очень опытный, но решение работает – Igen Apr 30 '23 at 20:38
  • Попробовал такой вариант, но тот же результат( – TheKolyian4ik May 01 '23 at 06:19
  • @user552914, когда вы в консоли набираете chcp, что выводит? – Igen May 01 '23 at 06:30
  • #include using namespace std;

    string s[3] = {"╔═╗", "║ ║", "╚═╝"};

    int main(){ system("@echo off\nchcp 65001"); //Отключаем вывод команд консоли и меняем кодировку for (string t : s) cout << t << endl; system("chcp"); } такой код даёт тХФтХРтХЧ тХС тХС тХЪтХРтХЭ Текущая кодовая страница: 866

    – TheKolyian4ik May 01 '23 at 08:11
-1

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

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

  • И чем это отличается от написанного мною "Работать надо в 866 кодировке, и код писать соответственно..."? :) – Harry May 01 '23 at 10:19