Russian Qt Forum

Программирование => С/C++ => Тема начата: G-virus от Май 12, 2011, 20:51



Название: Вывод спецсимволов в cout. Винда
Отправлено: G-virus от Май 12, 2011, 20:51
Всем привет. Тут нашлась острая необходимость выводить символы рамки в консоли винды.
В линуксе все прекрасно выводится, а в этом ведре не хочет.
Собственно, нужно выводить вот эти символы в поток cout
╔══════╗
║            ║
╚══════╝
Предлагали менять шрифт консоли, но можно ли как-то без этого?

И да, без вывода чисел с приведением типа к char


Название: Re: Вывод спецсимволов в cout. Винда
Отправлено: Fat-Zer от Май 13, 2011, 03:49
не вижу проблем.... покажите код который не работает.

ЗЫ: для рисования псевдографических интерфейсов лучше использовать платформозависимые вещи <conio.h> в дос/вин и ncurses в лине. Или везде второе.


Название: Re: Вывод спецсимволов в cout. Винда
Отправлено: lesav от Май 13, 2011, 07:44
не вижу проблем.... покажите код который не работает.

ЗЫ: для рисования псевдографических интерфейсов лучше использовать платформозависимые вещи <conio.h> в дос/вин и ncurses в лине. Или везде второе.

А если в шрифте(кодировке) консоли нет псевдографических символов ?  Чтож вы батенька рисовать то будите,  крякозяблы ?


И подход разный нужен, все зависит в какой консоле выводить спецсимволы. В програмной или в "настоящей" консоле.
Если в реальной консоле, шрифт нужно загрузить в видеоадаптер, в противном случае менять кодировку.


Название: Re: Вывод спецсимволов в cout. Винда
Отправлено: Fat-Zer от Май 13, 2011, 08:24
А если в шрифте(кодировке) консоли нет псевдографических символов ?  Чтож вы батенька рисовать то будите,  крякозяблы ?


И подход разный нужен, все зависит в какой консоле выводить спецсимволы. В програмной или в "настоящей" консоле.
Если в реальной консоле, шрифт нужно загрузить в видеоадаптер, в противном случае менять кодировку.
мудрите, батенька... в винде консоль она одна и использует дос-кодировки, для русского это 866. и псевдографика там есть втч в шрифтах в 99,9% случаев


Название: Re: Вывод спецсимволов в cout. Винда
Отправлено: lit-uriy от Май 13, 2011, 10:30
в винде консоль она одна и использует дос-кодировки, для русского это 866.
кодировка - предполагаемое соответствие кода символу
шрифт - жёсткое соответствие кода рисунку

Если в шрифте для некого кода нет рисунка, то его нет, не зависимо от кодировки.


Название: Re: Вывод спецсимволов в cout. Винда
Отправлено: G-virus от Май 13, 2011, 10:39
не вижу проблем.... покажите код который не работает.

ЗЫ: для рисования псевдографических интерфейсов лучше использовать платформозависимые вещи <conio.h> в дос/вин и ncurses в лине. Или везде второе.

Вот, собственно, элементарный код:
Код
C++ (Qt)
#include <iostream>
#include <stdlib.h>
#include <locale>
using namespace std;
 
int main(void)
{
setlocale(LC_ALL, "Russian");//без этого выводится еще более ужасное безобразие
cout << "╔══════╗" << endl;
cout << "║      ║" << endl;
cout << "╚══════╝" << endl;
system("pause");
return 0;
}
 

Вот, что выводится:
(http://dl.dropbox.com/u/6052533/ScreenShots/screenshot.jpg)


Название: Re: Вывод спецсимволов в cout. Винда
Отправлено: G-virus от Май 13, 2011, 10:47
Если в шрифте для некого кода нет рисунка, то его нет, не зависимо от кодировки.

В Lucida Console по-моему есть такие символы


Название: Re: Вывод спецсимволов в cout. Винда
Отправлено: Пантер от Май 13, 2011, 11:01
Lucida Console хороший шрифт для псевдографики.


Название: Re: Вывод спецсимволов в cout. Винда
Отправлено: G-virus от Май 13, 2011, 11:15
Lucida Console хороший шрифт для псевдографики.

Просто в виндовой консоли он же по умолчанию стоит, на сколько я знаю. Только вот выводиться что-то не очень торопится  ;D


Название: Re: Вывод спецсимволов в cout. Винда
Отправлено: Пантер от Май 13, 2011, 11:20
На сколько я помню, это не стандартный шрифт и для консоли он не установлен.
По крайней мере в ХР.


Название: Re: Вывод спецсимволов в cout. Винда
Отправлено: G-virus от Май 13, 2011, 11:22
На сколько я помню, это не стандартный шрифт и для консоли он не установлен.

А, да, Вы правы. Там "Точечные шрифты" стоит


Название: Re: Вывод спецсимволов в cout. Винда
Отправлено: Fat-Zer от Май 13, 2011, 11:38
кодировка - предполагаемое соответствие кода символу
шрифт - жёсткое соответствие кода рисунку

Если в шрифте для некого кода нет рисунка, то его нет, не зависимо от кодировки.
почти все шрифты(особенно консольные и моноспейсные) сейчас поддерживают символы из ibm-437, поэтому в этом вопросе остаётся только проблемма кодировки...

Вот, собственно, элементарный код:
Сколько людям не говори, что нельзя в исходниках использовать символы из верхней части ASCII, они их всё равно используют... ещё раз: не используйте в исходниках псевдографику, кирилицу и другую гадость... иначе однажды получите геморой на свою голову... гемор с кирилицей ещё можно пережить, если нет альтернатив, а вот псевдографику  проще отображать кодами...

Вот, что выводится:
в какой кодировке у вас исходники? то что здесь показано похоже на то как некоторые редакторы сохраняют в cp1251... штобы вот-так отображать псевдографику они (исходники) должны быть в ibm866.


Название: Re: Вывод спецсимволов в cout. Винда
Отправлено: G-virus от Май 13, 2011, 11:44
в какой кодировке у вас исходники? то что здесь показано похоже на то как некоторые редакторы сохраняют в cp1251... штобы вот-так отображать псевдографику они (исходники) должны быть в ibm866.

В ср1251 естественно =)


Название: Re: Вывод спецсимволов в cout. Винда
Отправлено: lit-uriy от Май 13, 2011, 21:41
>>В Lucida Console по-моему есть такие символы

>>На сколько я помню, это не стандартный шрифт и для консоли он не установлен.

А у меня в ХП (официальной, корпоративной) всё наоборот. "Точечные шрифты" как допвариант.

Итого: проблема автора темы - актуальна. Т.к. у пользователя может быть выбран не подходящий шрифт.

Бы ла как-то тема про раскрашивание консоли. Может тамошними способами и шрифт задать можно???


Название: Re: Вывод спецсимволов в cout. Винда
Отправлено: Fat-Zer от Май 14, 2011, 03:29
вроде мы выяснили. что у ТС в файле на самом деле было просто сохранено 'г', '=' и 'L' вместо '╔', '═' и '╚'


Название: Re: Вывод спецсимволов в cout. Винда
Отправлено: G-virus от Май 14, 2011, 10:32
Да я уже извратился, выводом спец символов через приведение типа  ;D

Там действительно, как уже говорили, нужно менять кодировку либо сохраненного исходника, либо консоли.
Под линуксом кодировка консоли и исходника вроде бы совпадает, в итоге просто копипастом засунуть в исходник символы псевдографики, они так и выведутся на экран, как надо. А вот в ведре... поставить только кодировку DOS-866, ну или извращаться))