Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > ввод, вывод, кириллица


Автор: limelight 22.4.2010, 22:03

    Если подобная тема поднималась(скорее всего да) то дайте ссылку, т.к. я ответа на свой вопрос не нашел.

Среда MSVS 2005. 
Чтобы выводить текст в кириллице удобно использовать setlocale(). с этим все ясно.
но как быть когда требуется ввести строку состоящую из кириллического текста посредством 
cin ? Ну, т.е. cin>>stroka, где stroka будет "Привет".
Поясню - если мы пишем вначале программы setlocale() , то с выводом кириллицы посредством 
cout у нас проблемы нет, но есть проблемы с вводом посредством cin. Если setlocale() не использовать то тогда возникают проблемы с выводом кириллицы, но нет проблем с вводом.

Как раз и навсегда решить эту проблему?
Неужели нет стандартных приемов работы с русским(да и любым интернациональным) текстом?

Автор: toxx 22.4.2010, 22:07
http://forum.vingrad.ru/forum/topic-269794/kw-faq-c++.html#

Автор: limelight 22.4.2010, 22:10
Возможно я не там смотрю...но , простите, где там про cin>> ? т.е. про ввод?

Автор: toxx 22.4.2010, 22:26
limelight
простите, это я вас не так понял =)
где то была такая тема найти не могу никак...

Автор: GoldFinch 23.4.2010, 08:07
может поможет wcin?

Автор: limelight 23.4.2010, 12:10
Мне нужно произвести ввод строки на русском при помощи getline(cin, name), т.к. эта функция позволяет включать в вводимую строку пробелы. wcin видимо здесь не подойдет..

Автор: GoldFinch 23.4.2010, 13:40
limelight, getline работает и с wcin

Код

template<class charT, class traits, class Allocator>
  basic_istream<charT,traits>&
    getline (basic_istream<charT,traits>& is,
             basic_string<charT,traits,Allocator>& str );

Автор: djamshud 23.4.2010, 13:45
Есть мнение, что wcin не поможет ввиду того, что путаются две однобайтовые кодировки.

Автор: GoldFinch 23.4.2010, 14:17
если использовать wcin, то возможно на юникодных ОС будет читаться юникод

Автор: djamshud 23.4.2010, 14:28
На "юникодных ОС" юникод "читается" и обычным cin с char-ом. У топикстартера же проблема в том, что терминал отдает программе строку в кодировке А, а распечатывать хочет в кодировке В.

Автор: limelight 23.4.2010, 14:48
Можно набирать текст программы в каком-нибудь досовском редакоторе, а потом вставлять в студию, при этом не придется использовать setlocale,  но это не самый удобный способ...
интересно такие проблемы с текстом только в консольных программах?

Автор: GoldFinch 23.4.2010, 15:05
djamshud, под "юникодными ОС" я подразумевал семейство winNT (у limelight msvc2005, а значит ОС - винда).
есть подозрение что wcin будет использовать юникодные функции winapi для работы с консолью.

Добавлено через 13 минут и 24 секунды
действительно, CRT читает char'ы

Автор: ИванМ 24.4.2010, 19:58
limelight, без OemToChar не обойтись, если нужно выводить прочитанную с консоли строку. С остальным локаль справляется.

Автор: limelight 25.4.2010, 09:50
ИванМ,  да, я  с вами полностью согласен...
Посмотрел по другим форумам, поискал в интернете и пришел к выводу что здесь самым простым/спокойным будет использовать CharToOem и OemToChar.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)