powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / С++ Вывод строки в DOS на русском
25 сообщений из 40, страница 1 из 2
С++ Вывод строки в DOS на русском
    #34596304
Guitarboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пусть простит меня Феникс (т.к это библиотека с его сайта ) , долго искавши эту библиотеку я все же ее нашел , и как я знаю здесь много людей которые хотели б получить эту библеотеку , с радостью ее вылаживаю вам , всем на_СИ_льщикам .


http://ifolder.ru/2355638



этот файл нужно закинуть в ту папку где все библиотеки С++.

Использовать так :

#include <iostream.h>
#include <printf_rus.h>
int main ()
{ printf_rus("Текст на русском ");
return 0;
}
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34596306
Guitarboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
извени за повтор 2 тем )
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34596422
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О дааа библиотека жизненно необходимая
БуГаГа
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34596429
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел реализацию.
Долго плакалъ пацтулом

Не гневи народ, не выкладывай [censored] да еще в таком количестве екземпляров
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34596456
crazydown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А не проще..?

#include <locale.h>
...
setlocale( LC_CTYPE, "Russian_Russia.866" );
printf("фываолдж");
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34597292
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crazydownА не проще..?выложенное гавнище, я так понял, делает перекодировку из ср1251 в ср866. Феникса запереть в психушке.
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34597319
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут еще важно КАК оно это делает
перед психушкой предлагаю кастрировать (на всякий случай)
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34599196
Guitarboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cупер одоренным можно было не ответчать на эту тему
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34599203
Guitarboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crazydownА не проще..?

#include <locale.h>
...
setlocale( LC_CTYPE, "Russian_Russia.866" );
printf("фываолдж");


Ты сам пробывал делать так как ты написал , только что попробывал ,неработает.
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34599209
Guitarboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы вообще все молодцы ... , когда я спрашивал никто не знает знает , а когда выкладываю еще и гоните ))))
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34599240
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guitarboy wrote:
> Вы вообще все молодцы ... , когда я спрашивал никто не знает знает , а
> когда выкладываю еще и гоните ))))
Обижаться смысла нету, "библиотека" полное г...

А теперь объясняю, почему.
1) Объявлять целиком не-инлайн функции в заголовках - дурной тон.
2) Да ещё и с using namespace std - это может к достаточно интересным
проблемам в коде привести, который "библиотеку" используеют.
3) Использовать "case" для перекодировки - это, извините, идиотизм. Можно
было сделать другие, более удобные варианты, например создать статический
массив 256 байт размером, где коду кодировки cp1251 будет соответствовать
код коидровки cp866. Если жалко 256байт, то можно было (поплатившись
скоростью) ввести две строки одинаковой длины с русским алфавитом - и,
найдя символ в первой строки, вставлять символ из второй. Можно было взять
двоичный поиск. Можно было офигеть (хотя это могло бы быть очень элегантно)
и использовать std::map или нечто вроде него. Кстати, каждый вариант был бы
короче на порядок.
4) Нету поддержки printf - вот нафига оно без этого?
5) Ну, и кроме того (сильно сомневаюсь, что вы именно ДОСом пользуюетесь -
есть функции типа AnsiToOem, и т.д. и т.п.
6) Можно было воспользоваться способом, предложенным crazydown'ом, а
ежели "не пашет", то тогда, блин, лезем в документацию и читаем её до
нахождения корректного объявления нужной локали.
7) Можно было взять и перекодировать все исходники в cp866 при помощи Far
(F4, Ctrl+A, Shift+Del, F8, Shift+Insert), либо утилиты recode (recode
cp1251..cp866 <1.c >2.c) и т.д. и т.п.
8) Что, блин, за "библиотека" в один файл? Где *.lib, *.c и прочее? В *.h
выкладываются объявления классов, заголовки функций extern переменные, но
не функции целиком.
9) Include guard где? (#ifndef STUPID_LIBRARY #define STUPID_LIBRARY #endif)
Если этот файлик будет использоваться более чем одним *.c* файлом, то
вполне возможна ситуация когда компилиться не будет (symbol blablabla
already defined in kajhgsdkfahgk.obj).

Вывод. Если автор на C++ программит не второй раз в жизни, то руки ему
поотрывать, дабы будущих программеров не портил.

ЗЫ. Следите за орфограией, плиз.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34599249
Guitarboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ErV
Guitarboy wrote:
> Вы вообще все молодцы ... , когда я спрашивал никто не знает знает , а
> когда выкладываю еще и гоните ))))
Обижаться смысла нету, "библиотека" полное г...


Posted via ActualForum NNTP Server 1.4

хе , библиотеку можно обозвать поразному , а слабо зделать лучше и сюда выложить ?
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34599254
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Guitarboy
main.cpp:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#include <stdio.h>
#include "win2dos.h"

int main(int argc, char** argv){
    ruprint("123фыва");
    getchar();
    return  0 ;
}

win2dos.h:
Код: plaintext
1.
2.
3.
4.
5.
6.
#ifndef WIN2DOS
#define WIN2DOS

void ruprint(const char* str);

#endif

win2dos.cpp:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
#include "win2dos.h"
#include "stdio.h"

static const unsigned char recode[ 128 ] = {
         63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 , 
         63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  63 ,  255 ,  246 ,  247 , 
         63 ,  253 ,  63 ,  63 ,  63 ,  240 ,  63 ,  242 ,  63 ,  63 ,  63 ,  63 ,  244 ,  248 ,  63 ,  63 , 
         63 ,  63 ,  63 ,  63 ,  250 ,  241 ,  252 ,  243 ,  63 ,  63 ,  63 ,  63 ,  245 ,  128 ,  129 ,  130 , 
         131 ,  132 ,  133 ,  134 ,  135 ,  136 ,  137 ,  138 ,  139 ,  140 ,  141 ,  142 ,  143 ,  144 , 
         145 ,  146 ,  147 ,  148 ,  149 ,  150 ,  151 ,  152 ,  153 ,  154 ,  155 ,  156 ,  157 ,  158 , 
         159 ,  160 ,  161 ,  162 ,  163 ,  164 ,  165 ,  166 ,  167 ,  168 ,  169 ,  170 ,  171 ,  172 , 
         173 ,  174 ,  175 ,  224 ,  225 ,  226 ,  227 ,  228 ,  229 ,  230 ,  231 ,  232 ,  233 ,  234 , 
         235 ,  236 ,  237 ,  238 ,  239 
};

void ruprint(const char* str){
        if (!str) return;
        const unsigned char* p = (const unsigned char*)str;
        for (;*p; p++){
                unsigned char c = *p;
                putc((c >  128 )? recode[c&0x7F]: c, stdout);             
        }
}

Makefile:
Код: plaintext
1.
2.
3.
all: win2dos.cpp main.cpp
        g++ -o win2dos win2dos.cpp main.cpp
        mingw-g++ -o win2dos.exe win2dos.cpp main.cpp

Guitarboy wrote:

> а слабо зделать лучше и сюда выложить ?
А слабо книжку взять, почитать чуть- чуть и самому собрать?
Али умеем только обижаться и народ на "слабо" подкалывать?


Если не пашет - меняй таблицу перекодировки, у меня Windows нету, системная
кодировка koi8-r. По таблицам кодировки ищи гуглом.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34599256
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и само собой, ни одна подобная "библиотека" не спасет, если у
пользователя консоль не в cp866, а исходники не в cp1251. Так что
правильней будет пользоваться setLocale. RTFM, короче.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34600050
Guitarboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ErV

А слабо книжку взять, почитать чуть- чуть и самому собрать?
Али умеем только обижаться и народ на "слабо" подкалывать?


Если не пашет - меняй таблицу перекодировки, у меня Windows нету, системная
кодировка koi8-r. По таблицам кодировки ищи гуглом.

Может быть сразу книжку подскажеш, я вообще начинаю с++шник и могу неразобраться , но могу попытаться . и я не обижаюсь , просто когда эта тема была в прошлый раз , никто толком на нее не ответил .
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34600064
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guitarboy wrote:

> Может быть сразу книжку подскажеш, я вообще начинаю с++шник и могу
> неразобраться , но могу попытаться . и я не обижаюсь , просто когда эта
> тема была в прошлый раз , никто толком на нее не ответил .
Книжку - Бьерн строструп, программирование на C++ 3е издание, там большая
часть концепций должна быть объяснена. Можно "C++ для чайников" или нечто
подобное, но не факт, что оно того стоит. Есть и другие книги (C++
Unleashed), но они часто идут на английском, что может быть проблемой, как
я понимаю :) (если с инглишем проблемы, то его лучше выучить). Ничего
другого посоветовать не смогу, так как последнюю книгу по C++ читал года
полтора-два назад. По-моему, чтение книг надо довешивать нормальной
практикой и обильным ковырянием в языке программирования/программах. Потом,
здесь на форуме есть раздел "книги"
(http://www.sql.ru/forum/actualthread.aspx?tid=194595), где может быть
много полезного (в том числе объяснено как искать книги гуглом
(http://www.sql.ru/forum/actualthread.aspx?tid=194595&pg=1#1770824))
Просто по любому возникающему вопросу есть смысл чуть-чуть поковыряться
самому, сунувшись на www.google.com (предварительно почитав
http://www.google.ru/intl/ru/help/operators.html (на русском её нет))
обычно все нужное быстро находиться. Кроме гугла есть смысл заглядывать на
ru.wikipedia.org и en.wikipedia.org . Потом, надо пользоваться встроенной в
компилятор справкой (в Delphi, Borland C++ Builder, Visual Studio C++ есть
мощная справочная система, в которой можно найти информацию по функциям
языка и т.д.). Есть смысл заглядывать на msdn.microsoft.com. Ну и вот тут
(http://www.ln.ua/~openxs/articles/smart-questions-ru.html) был нормальный
(хотя и, возможно, грубоватый) мануал по "задаванию" вопросов.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34600605
Feniksa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GuitarboyПусть простит меня Феникс (т.к это библиотека с его сайта )
Прощаю... Всегда рад помочъ.

Изначально "библиотека" (Ух, как громко сказал) разрабатывалась для вывода кирилици в WIN32 приложениях для разных версий компиляторов.

Самое простое и оказалось самое стабильное...

Пробовал использовать локализацию (фасеты), но так нифига и не вышло. Для разных win32 компиляторов локализация работала по разному... Даже в старой Visual Studio и .NET реализация локализации различалась. Поэтому идея с использованием фасетов отвалилась (хотя использование локализации более удобный и изящный метод. Но для такой тривиальной задачки он просто не срабатывает).

ErV. К сожалению Ваш метод не есть гуд. Ведь требуеться больше памяти и с точки зрения надёжности - не катит. (Как бы с бубеном не танцевал, так и не добился стабильности). А по скорости она так же выполняеться.

Gluk (Kazan) - я от Вас так и не увидел что либо для решения данной проблемы.

Значит ввод таков. Я обновлю printf_rus.h и заново выложу... Всем удачи!
http://feniksa.narod.ru/files/pmaker/lib/printf_rus.h
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34600643
Guitarboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Феникса респект . Библиотека супер .
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34600684
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Feniksa wrote:

> ErV. К сожалению Ваш метод не есть гуд. Ведь требуеться больше памяти и с
на128 байт? Это не цифра, даже для MS-DOS с одним мегабайтом оперативки.
А у вас имеется один хороший минус - зависимость от кодировки исходников.
Константы у вас представлены символьно, если кодировка страниц не в cp1251
все посыпется (ИМХО), если человек это будет с браузера утягивать,
исходники могут быть конвертнуты, например в юникод. Если на мою кодировку
koi8-r скинуть юникод, от программы ничего не останется. Впрочем, есть и
арифметические алгоритмы замены букв, надо просто поискать.

> точки зрения надёжности - не катит. (Как бы с бубеном не танцевал, так и
> не добился стабильности).
Вот тут по-подробней, пожалуйста. Таблицы легко получить, кстати, по такому
же принципу Far работает, только он их в реестре хранит.

> А по скорости она так же выполняеться.
Вы уверены? Я нет. Дизассемблированный код switch/case'а, который я
последний раз видел, содержит в себе мини-массив пар, в котором одному
элменету case'а сопостовляется один адрес перехода. Так вот, массив
перебирается линейно, от начала до конца, при нахождении "правильного"
case'а происходит переход по адресу. Т.е. за счет его(массива) укорочения
идет увеличение времени поиска. люкап элемента в таблице, как я привел,
будет нормальным компилятором, скорее всего (если компилятор умный)
соптимизирован в одну команду относительной адресации (вру, в две - там ещё
and был) у вас будет как минимум cmp, jmp addr, loopnz/jmpnz (за точность
не ручаюсь, давно асмом пользовался). Дельфийский же компилятор вообще case
раскладывал ка if then else if then..., что займет, как мне кажется, больше
места. Так что не факт, что памяти меньше занимает, и что по скорости
одинаково.

Далее. Если я правильно помню, то можно было спокойно в любой версии Win
перегнать текст из любой одной кодировки в юникод (т.е. wchar_t или WCHAR и
т.д.), а оттуда в любую другую кодировку. Медленно, но стабильно и надежно.

Потом, были функции управления коносолью под Win32. Вполне возможно, что там
кроме изменения её размера было и изменение её шрифта. Есть же
SetFileAPIsToAnsi/SetFileAPIsToOem (вроде бы так оно называется). Ведь не
из под чистого доса же вы работаете? :)

Ну а если из-под чистого доса, то кто вам мешает загрузить в карточку свой
собственный шрифт, с "правильной" кодировкой? (хотя вряд ли вы в досе
будете разрабатывать в кодировке, отличной от 866)
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34600686
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и потом, неужели так трудно писать программу сразу в нужной кодировке?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34600779
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guitarboy ErV
Guitarboy wrote:
> Вы вообще все молодцы ... , когда я спрашивал никто не знает знает , а
> когда выкладываю еще и гоните ))))
Обижаться смысла нету, "библиотека" полное г...


Posted via ActualForum NNTP Server 1.4

хе , библиотеку можно обозвать поразному , а слабо зделать лучше и сюда выложить ?

ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1033/winprog/winprog/obsolete_windows_programming_elements.htm

см. AnsiToOem

если обижаешься на ДЕЛЬНУЮ критику, ты не только ЗЕЛЕН, но еще и КЛИНИЧЕСКИ ГЛУП
То что ты выложил, не просто ПРИМИТИВНО, оно иллюстрирует ВСЕ моменты на тему КАК НИКОГДА НЕ НАДО ДЕЛАТЬ (скажем перекодировка ЖЕСТКО прошитая в switch, посимвольный вывод В STREAM !!!, название функции не соответствующее действительности и далее и далее ...)

если бы ты по крайней мере перекодировал строку в массиве, это было бы по ПРОСТО ЗЕЛЕНО
Кто тебе сказал вообще, что я собираюсь ВЫВОДИТЬ перекодированную строку, да еще ПОСИМВОЛЬНО и в STREAM ???
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34600795
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guitarboy ErV

А слабо книжку взять, почитать чуть- чуть и самому собрать?
Али умеем только обижаться и народ на "слабо" подкалывать?


Если не пашет - меняй таблицу перекодировки, у меня Windows нету, системная
кодировка koi8-r. По таблицам кодировки ищи гуглом.

Может быть сразу книжку подскажеш, я вообще начинаю с++шник и могу неразобраться , но могу попытаться . и я не обижаюсь , просто когда эта тема была в прошлый раз , никто толком на нее не ответил .

начать можно с этого в сети валяются ее сканы, но религия не позволяет мне учить тебя пользоваться гуглом.
В прошлый раз на тему не ответили поскольку здесь она интереса практически ни для кого не представляет. Коротко говоря это НЕ ПРОБЛЕМА.

Странно, что ты до сих пор этого не понял

2 Feniksa

Постарайся не обижаться и реагировать на критику конструктивно. Все сказанное было сказано ПО ДЕЛУ
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34601809
Feniksa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не буду спорить с ErV, так как не хочу начинать религиозные войны ... да и это безсмысленно для такого тривиального случая. Что бы закончить все споры вот что я скажу.

Методов достаточно много. Использование case и таблиц преобразования, или locale ... каждый из єтих методов заслуживает на уважение. У каждого есть свои + и - (а у некоторых может и ++).

И какой метод использовать - решать Вам.

Далее я не буду принмать участие в обсуждении, так как не вижу в этом никакого смысла.

P.S. Как все поняли, библиотека шараварная. Если что не нравиться, можете изменить или переписать... Всё в ваших руках. Дерзайте и ВСЕМ удачи
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34602295
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я остановился на том, что держу строки в юникоде, настраиваю локаль setlocale(LC_CTYPE,".OCP"); и всё работает штатными средствами.
...
Рейтинг: 0 / 0
С++ Вывод строки в DOS на русском
    #34602565
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FeniksaP.S. Как все поняли, библиотека шараварная. Если что не нравиться, можете изменить или переписать... Всё в ваших руках. Дерзайте и ВСЕМ удачи

Смешно
По моему, он все таки обиделся
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / С++ Вывод строки в DOS на русском
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]