Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 629 • Страница 4 из 32<  1  2  3  4  5  6  7 ... 32  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
HofD
Можно так:
Код:
   SetConsoleOutputCP(1251);
   printf("Вот это по русски\n");

вырезка из MSDN:
Цитата:
... if the current font is a raster font, SetConsoleOutputCP does not effect how extended characters are displayed...

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

Другой вариант:
Код:
   char out[20];
   CharToOem("Но это как-то не удобно\n",out);
   printf(out);



Партнер
 

Member
Статус: Не в сети
Регистрация: 04.01.2005
Откуда: Москва
mein Да, первый вариант работает, но это не удобно, т.к. действовать не на любом компе будет, а второй вариант почему то не компилирует, ругается что не может char[25] в LPCWSTR перевести. Может еще как можно? Я где-то читал, что для этого служит _TCHAR* из int _tmain(int argc, _TCHAR* argv[]) (что-то там о Unicode)......

_________________
Win XP - если бы не этот отстой, то сидели бы сейчас в DOS...


 

Member
Статус: Не в сети
Регистрация: 19.04.2005
Откуда: Москва
HofD
Для Unicode-проекта код чуток будет отличаться. Вот переделанный второй вариант mein'а, по идее, работающий как в Unicode, так и в ANSI:
Код:
   TCHAR out[100];
   CharToOem(_T("Но это как-то не удобно\n"), out);
   printf(out);


 

Member
Статус: Не в сети
Регистрация: 04.01.2005
Откуда: Москва
А никак нельзя обойтись без обьявления массива и последующей записи строки а потом только вывода на экран?

_________________
Win XP - если бы не этот отстой, то сидели бы сейчас в DOS...


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
HofD
Цитата:
Да, первый вариант работает, но это не удобно, т.к. действовать не на любом компе будет

Я обычно для себя консольные пишу :) . Может возможно как-то делать это программно ?!
Кстати есть ещё третий вариант: писать в 866 кодировке сразу. Единственная проблема в виндувозных редакторах (шрифт Terminal вроде решение), но работает зато железно и ничего не надо делать. А писать сам текст можно в любом текстовом приложении - я например DN (win32) использую.


 

Member
Статус: Не в сети
Регистрация: 19.04.2005
Откуда: Москва
HofD
Можно: сразу записать строку в нужной кодировке. Например, printf(_T("агббЄЁ© ⥪бв")); должен вывести на экран фразу "русский текст". :) Можно просто любым конвертором преобразовать исходный CPP-файл из Windows-кодировки в ASCII, тогда как раз получится то, что надо. Вот только править и отлаживать такой код будет весьма неудобно... :(
Ну и другие варианты - поиграться с локалью. Что-то такое ведь было, сам я с этим не разбирался досконально. Вот, на RSDN есть небольшая статейка, посвящённая этой проблеме, посмотри...

_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
HofD
Цитата:
А никак нельзя обойтись без обьявления массива и последующей записи строки а потом только вывода на экран?

Да поидее можно написать свою фунцию где приниматся будет "русский текст" , а возвращатся указатель. Правда указатель на что?! Можно глобальную переменную завести например для этого. А может как-то ещё? Я в этом вопросе не очень как-то :oops:


 

Member
Статус: Не в сети
Регистрация: 19.04.2005
Откуда: Москва
mein писал(а):
Правда указатель на что?!

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

_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?


 

Member
Статус: Не в сети
Регистрация: 02.08.2005
Откуда: с того света
А никто не знает, как в visualc++ работать с qt?
Не в смысле написания кода, а в смысле компиляции?

_________________
There are more things in heaven and earth, Horatio, than are dreamt of in your philosophy


 

Member
Статус: Не в сети
Регистрация: 04.01.2005
Откуда: Москва
2All Значит буду искать что-нибудь самое оптимальное, найду - сообщу, нет - тоже сообщу :)[/b]


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
CaptainFlint писал(а):
Глобальную переменную тоже можно
Это не thread safe
p566 писал(а):
А никто не знает, как в visualc++ работать с qt?
На фиг???? Чем псс не устроил?

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Member
Статус: Не в сети
Регистрация: 04.01.2005
Откуда: Москва
2All Люди что за фигня - компилятор не может преобразовывать данные в строках:
Код:
   TCHAR out[100];
   CharToOem(_T("Но это как-то не удобно\n"), out);
   printf(out);

Пишет ошибки преобразования. У кого-нибудь работающие варианты есть? :?:

_________________
Win XP - если бы не этот отстой, то сидели бы сейчас в DOS...


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
HofD printf есть и для wide character - см. документы

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Member
Статус: Не в сети
Регистрация: 13.11.2004
Откуда: Новосибирск
Есть проблема. Создаю глобально массив (double jm[40][40][6]; ), в одной функции изменяю значения его элементов, при этом они точно не нулевые (проверял сразу через printf("%f, %f, %f \n",jm[h][fi][0],jm[h][fi][1],jm[h][fi][2]); ). В другой функции обращаюсь к значениям массива, но массив оказывается заполнен нулями. В чем причина?


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
qasz Да... а мы телепаты? Код покажи сначала...

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Member
Статус: Не в сети
Регистрация: 13.11.2004
Откуда: Новосибирск
nickyoz
Код:
double jm[40][40][6];

void f11()
{ int h=1, fi=1;

for(h=1;h<22;h++)
{
   for(fi=1;fi<22;fi++)
   {
   jm[h][fi][0]=sin(fi);
   jm[h][fi][1]=cos(fi);
   jm[h][fi][2]=fi*h;
   jm[h][fi][3]=sin(h);
   jm[h][fi][4]=sin(fi*h);
   jm[h][fi][5]=cos(fi/12);
              printf("%f, %f, %f \n",jm[h][fi][0],jm[h][fi][1],jm[h][fi][2]);
   fi++;
   }
h++;
}

}

void f22()
{int i, j;
 for(i=1;i<22;i++)
   for(j=1;j<22;j++)
   printf("%f, %f, %f \n",jm[i][j][0],jm[i][j][1],jm[i][j][2]);
}

Вообще код большой, но даже то что я привел при вызове выводит совершенно разные вещи (f22 теперь отображает не все нули а просто всякую ерунду).


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
qasz НУ и код? Ну кто же так пишет? ужастики 8(((
А вывод программы можно
у тебя должны быть заполнены эелемнты [1...21][1..3..5...21][1...5]
Разве не так?
А вообще где тут все нули?

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
qasz писал(а):
fi++;} h++;

Нафига инкремент внутри цикла то???


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
Ray Adams Ой... он и вторую также... наверно надо мануал почитать отправить....
qasz Скажи что ты от масива хочешь?

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Member
Статус: Не в сети
Регистрация: 13.11.2004
Откуда: Новосибирск
nickyoz, Ray Adams, сначала там был цикл while, но он не работал, как и for не работает сейчас (fi++ и h++ прсто забыл убрать, когда копировал). Без инкремента printf в первом и втором случае выводит на экран разные числа :(.
PS nickyoz, че правда так некрасиво написано?


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 629 • Страница 4 из 32<  1  2  3  4  5  6  7 ... 32  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  

Лаборатория














Новости

Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan