![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Волод |
|
|||
|
Unregistered |
Всем привет! Подскажите, как мне обойти следующую проблему.
Собственно, я новичок, пытаюсь изучить великий и могучий С++. Работаю на компиляторе VC C++ и практикуюсь на небольших консольных программках из учебника, который сейчас читаю. Очень хотелось бы иметь поддержку кириллицы в консоли, пока смог этого добиться через следующий код: void main() { char question[]="Введите число от 1 до 9"; CharToOem(question, question); cout << question<<endl; } Через добавление этого кода моя консоль стала поддерживать кириллицу. Напрягает только то, что постоянно приходиться писать три строки кода для вывода текста в консоли по русски. Попробовал я вынести код в отдельную функцию (russ), а вызов делать примерно так: cout << russ(“Введите число от 1 до 9”)<<endl; но функция не работает – либо компилятор жалуется на невозможность преобразования конвертируемых типов, либо синтаксис контроль программа проходит, но аварийно завершается. А вот и сама функция: char *russ(char *question) { CharToOem(question, question); return question; } Чувствую, что здесь где-то серьезно напутал с указателями – ссылками, но как не комбинировал символы * и &, результата добиться не смог. Мои соображения следующие: в С++ строку можно рассматривать как массив, через указатель мы встаем в начало массива, соответственно получаем его (строку-массив) как входящий параметр, изменяем через API-функцию и возвращаем опять же указатель на массив. То есть после выполнения функции строка должна быть преобразована и указатель спозиционирован на начале массива. Соответственно, строка должна нормально считаться в поток count, но этого не происходит . Где я не прав? Буду очень признателен за грамотные ответы с объяснением. Ну и второй вопрос на эту - же тему: Может, существуют другие способы кирилизации символов в консоли? - и какой лучше/удобнее применять. Спасибо всем. Волод |
|||
|
||||
| КС |
|
|||
|
Unregistered |
Зачем повсюду указателей наставил? |
|||
|
||||
| Волод |
|
|||
|
Unregistered |
Вроде же написал выше: потому-что передаю в функцию массив через указатель и возвращаю указатель на массив символов (строку). А как надо?
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
Проблема в том, что cout ничего не знает о твоей функции и соответственно не может в нее _вывести_. Используй перегрузку операторов.
+ в региональных настройках выставь соотвествующий язык для не Юникод-программ. -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Alastis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 15.11.2004 Где: Казахстан, Астана Репутация: 4 Всего: 10 |
1. Написать setlocale(LC_CTYPE, ".866" );
2. Все делать в UNICODE. Используй wstring, wprintf и т.д. Это сообщение отредактировал(а) Alastis - 26.11.2004, 06:16 -------------------- Прости, что я говорю, когда ты меня перебиваешь. |
|||
|
||||
| Intro |
|
|||
|
Unregistered |
Вот так
#define MAX_SIZE 9999 char krakozybr_to_rus(char string[MAX_SIZE]) // или применять sizeof { char res[MAX_SIZE]; // или динамический массив if(string != "\0") { CharToOem(string, res); // Или как там, какой аргумент первей стоять должен ? Return(res); } } вот и всё, а теперь применение... void main() { char qu[] = "Привет, если ты видешь русские буквы, то нажми any key\n"; cout << krakozybr_to_rus(qu) << endl; } Всё ИМХО... |
|||
|
||||
| Intro |
|
|||
|
Unregistered |
getch();
|
|||
|
||||
| !Жека! |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 26.11.2004 Репутация: нет Всего: нет |
Не парся и напиши следующие:
unsigned char *RUSS(unsigned char *str) { for (int i = 0; str[i]; ++i) if (str[i] >= 192 && str[i] <= 239) str[i] -= 64; else if (str[i] >= 240 && str[i] <= 255) str[i] -= 16; return str; } и вызывай ее: cout << RUSS("тра ля ля и все такое"); |
|||
|
||||
| Intro |
|
|||
|
Unregistered |
!Жека!
Не вижу рациональности... |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Всем спасибо, буду пробовать!
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |