| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Как прео тип string в char без потери русских букв |
| Автор: vladd 6.6.2012, 09:53 | ||||||
| Здравствуйте! У меня Borland C++ Bulder Enterprise Suite Version 6.0(Build 10.155) Имею структуру. Нужно с консоли её заполнить на русском языке так, чтобы при обратном выводе русские буквы не превратились в кракозябры. Для этого для считывания с консоли использую код
На строку
ругается.
Что нужно сделать, чтобы заполнить структуру, оно не ругалось и при выводе сохранились русские буквы. |
| Автор: artsb 6.6.2012, 09:59 | ||
|
| Автор: vladd 6.6.2012, 10:16 |
Спасибо, но русских букв уже нет.![]() Функция копирования исказила их. |
| Автор: artsb 6.6.2012, 10:32 |
| Как выглядит ваша структура? Добавлено через 40 секунд И почему вы не пользуетесь WideChar? |
| Автор: vladd 6.6.2012, 10:35 | ||
| Вопрос считаю решенным. Остается узнать как правильно заполнить структуру без потери русских букв. Вопрос к модератору. Мне надо открыть новую тему или же можно здесь продолжить? Добавлено через 2 минуты и 13 секунд Моя структура
|
| Автор: artsb 6.6.2012, 11:15 | ||
vladd, используйте юникод:![]()
|
| Автор: vladd 6.6.2012, 11:31 | ||
Не работает этот код у меня.
![]() |
| Автор: artsb 6.6.2012, 12:49 |
| Аномалия какая-та. Не может же программа взять и пропустить половину строк. Не записав при этом никаких ошибок... |
| Автор: vladd 6.6.2012, 13:02 |
| По моему программа на них вообще не реагирует. Буква w, когда первая в слове, запрещает реагировать на функции. Видимо что то связано с Windows. Добавлено через 2 минуты и 52 секунды Если я комментирую библиотеки тогда появляются ошибки. |
| Автор: vladd 6.6.2012, 14:26 |
| Вот на форуме попробую |
| Автор: artsb 6.6.2012, 15:02 |
| У меня работает. Правда без CLX. Зачем вы вообще подключаете clx.h? |
| Автор: vladd 6.6.2012, 15:10 |
| Закоментировал #include <clx.h>. Все то же самое. Сейчас попробую закачать другой с++ builder 6. Может в самой программе какие глюки. |
| Автор: artsb 6.6.2012, 16:14 |
| - Попробуйте создать проект заного. Убедитесь, что всякие там галочки типа "CLX" сняты. - Попробуйте установить все доступные патчи для BCB6. - Попробуйте воспользоваться более свежей версией C++Builder. |
| Автор: vladd 7.6.2012, 08:37 |
| Все переустановил.Создал проект заново. А где брать эти патчи для BCB 6? Всё то же самое. Может проблема в Windows? У меня стоит XP 3. |
| Автор: artsb 7.6.2012, 09:13 |
Например, http://club.shelek.ru/download.php?id=357. Сильно сомневаюсь, но давайте проверим. Соберите полностью релизный проект и выложите на файлообменнике или здесь. Проверю у себя на семёрке. |
| Автор: vladd 7.6.2012, 09:49 |
| Добавил патч.Изменений нет. |
| Автор: vladd 7.6.2012, 10:14 |
| А как писать программу в UNICODE? Где об этом можно почитать? |
| Автор: artsb 7.6.2012, 11:16 |
| vladd, я просил готовый собранный релизный EXE'шник Просто используй тип wchar_t вместо char. В VCL WideString вместо AnsiString. И выставить соответствующую настройку в опциях проекта. А ещё можно писать универсальный проект: 1. подключить tchar.h 2. вместо wchar_t и char использовать _TCHAR 3. вместо WideString и AnsiString использовать String 4. строки оборачивать в дефайн _T(), т.е. например, _T("hello world"); или символ - _T('1') 5. использовать дефайны из tchar.h вместо самих функций. Т.е. вместо strlen() и wcslen(), использовать _tcslen() и т.д. В этом случае, компилятор сам разберётся какой тип использовать в зависимости от настроек проекта. Читать про всё это в Интернете |
| Автор: vladd 7.6.2012, 11:30 |
| А как создать этот собранный релизный EXE'шник в C++ Bulder 6? Честное слово первый раз сталкиваюсь. Это скомпилированная программа? |
| Автор: artsb 7.6.2012, 11:57 | ||
Ага. Только не забудь снять галочки
|
| Автор: vladd 7.6.2012, 12:02 |
| Сделал по этому совету. Хочу, чтобы моя программа работала на другом компьютере, где не установлен C++Builder. Как сделать, чтобы пpогpамма на C++Builder 3,4,5,6 и т.д. не требовала .bpl, .dll ? В Project|Options|Packages снять галку с Build with runtime packages, Project|Options|Linker снять галку с Use dynamic RTL. Что то никак exe файл получить не могу. |
| Автор: artsb 7.6.2012, 12:36 |
В каком смысле не можешь? Сделай Project->Build. В папке с проектом появится exe-файл. |
| Автор: vladd 7.6.2012, 12:39 |
| Нашел еще вот http://www.ithowto.ru/264-nastrojka-kompilyatora-v-c-builder.html Теперь релиз после этого. |
| Автор: vladd 7.6.2012, 15:13 |
| Новая задача. После создания релизный EXE'шника, перестал работать С++Bulder 6. Не могу запустить программу даже на Hello Word. Пишет [Linker Error] Unresolved external '_main' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\C0X32.OBJ. Что делать? Кто Нибудь может помочь. |
| Автор: artsb 7.6.2012, 15:45 | ||||
Ну да. Но у тебя же BCB6. Там малость по-другому. У меня твоя программа тоже сразу просит нажать любую клавишу. Попробую дома установить BCB6 и проверить. Правда, у меня дома семёрка, так что эксперимент будет не совсем "чистый".
Что-то ты там накрутил |
| Автор: vladd 7.6.2012, 15:50 |
| Спасибо. Последний вопрос решился сам по себе. С++ Bulder завис. Перегрузил компьютер. И вроде снова стал видеть main. |
| Автор: artsb 8.6.2012, 00:07 |
| Вот что выяснилось: BCB6 не поддерживает Юникод. А то что есть, это только задатки Юникода Почитай http://forum.oszone.net/thread-129824-6.html как писать по-русски в консоли. |
| Автор: vladd 8.6.2012, 07:25 | ||||||||
Спасибо большое за помощь. Но вопрос был, сейчас подкорректирую. Как заполнить структуру элементами на русском языке, чтобы при выводе в консоль тоже были русские буквы. Повторюсь. Для вывода русских букв в консоль я использую код
Для чтения русских букв с консоли я использую код
str1 уже содержит слово русскими буквами. Но необходимо присвоить элементам структуры значение str1 без искажения русских букв. Пробовал
и так
Не получается. Русские буквы искажаются в первом случае функцией cin >>. Во втором случае функцией strcpy. Вопрос. Как заполнить структуру элементами на русском языке, чтобы при выводе в консоль тоже были русские буквы? Прошу извинить за то что повторяюсь. |
| Автор: artsb 8.6.2012, 11:08 |
| Посмотри в сторону функций: http://msdn.microsoft.com/en-us/library/windows/desktop/ms647473%28v=vs.85%29.aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ms647493%28v=vs.85%29.aspx ЗЫ а писать на BCB6 принципиально или можно перейти на более свежую версию? |
| Автор: vladd 8.6.2012, 12:05 |
| Обязательно на Borland или Dev. |
| Автор: artsb 8.6.2012, 12:41 |
Так поставь C++Builder 2009 или старше, и используй Юникод. |
| Автор: vladd 8.6.2012, 13:54 |
| Спасибо за помощь. Но в техникуме стоит BCB 6. Поэтому придется делать на BCB 6. |