Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с русскими буквами 
:(
    Опции темы
vladd
Дата 5.6.2012, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Пишу на C++ Bulder 6 в консоли. Для вывода на экран русских букв использую код
Код

 //Руссификация
   ostream& operator<<(ostream &stream,char* s){
        for(char* ps=s; *ps; ps++){
                if(*ps=='ё')
                        stream<<char(241);
                else if(*ps=='Ё')
                        stream<<char(240);
                else if(*ps>=-64 && *ps<=-17)
                        stream<<char(*ps+64+128);
                else if(*ps<0)
                        stream<<char(*ps+64+176);
                else
                        stream<<*ps;
        }
        return stream;
}

Работает правильно. Но вот когда пишу в консоли русский текст, присваиваю его переменной а потом вывожу на экран получаю кракозябры.
Что нужно сделать чтобы выводило нормальный русский текст?
Я так понимаю что проблема при считывании  русских букв с экрана.
PM MAIL   Вверх
artsb
Дата 5.6.2012, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Почему бы не воспользоваться setlocale()?
Код

setlocale(LC_ALL, "Russian");



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
vladd
Дата 5.6.2012, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Это 
Код

setlocale(LC_ALL, "Russian");

у меня даже на консоль вместо русских букв выдает кракозябры.
У меня Borland C++ Bulder Enterprise Suite Version 6.0(Build 10.155)
PM MAIL   Вверх
artsb
Дата 5.6.2012, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(vladd @  5.6.2012,  09:57 Найти цитируемый пост)
у меня даже на консоль вместо русских букв выдает кракозябры.

Эта строчка должна быть прописана в самом начале программы.
У меня раньше работало и сейчас работает. И под VS и под RADStudio. К сожалению, нет BCB6, чтобы проверить.

Добавлено через 11 минут и 34 секунды
Попробуйте ещё:
Код

setlocale(LC_ALL, "russian_russia.1251");

Или:
Код

#include <windows.h>
// ...
SetConsoleOutputCP(1251);
SetConsoleCP(1251);

Или же используйте WideChar:
Код

setlocale(LC_ALL, "");
wprintf(L"тест");



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
vladd
Дата 5.6.2012, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Я вставлял все это в класс main
Код

 int main (void)
{
   setlocale(LC_ALL, "");
   wprintf(L"тест");
 while (Menu ()); // Цикл пока пользователь не выбрал выход
    Clear ();
     return 0;
    }

подобно этой вставке. И все равно даже в консоль идет вывод кракозябр вместо русских букв.
PM MAIL   Вверх
vladd
Дата 5.6.2012, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Код

setlocale(LC_ALL, "");
   wprintf(L"тест");


Вот этот код вроде выдает русские символы в консоль. Но появилась следующая проблема. Есть строка вывода текста в консоль такого вида 
Код

cout << i << ". " << pacient->Bolnoy << "|   |"<< pacient->Doctor << "|    " << pacient->Age << "|     " << pacient->Diagnoz<<"|      "<< pacient->Otdelenie << "|       |" << endl;
 
где pacient - это структура. Как эта строка должна выглядеть через  wprintf(L" ");Дошел до этого 
Код

wprintf(i " ." L  ));
 
А дальше как не знаю. Постоянно идут ошибки.Прошу помощи.
PM MAIL   Вверх
LeonidPr
Дата 5.6.2012, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2012
Где: г. Чебоксары

Репутация: нет
Всего: 1



У меня на BCB5 работает правильно.
--------------------
pkunzip.zip
PM MAIL   Вверх
artsb
Дата 5.6.2012, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Код

wcout << i << L". "
 << pacient->Bolnoy   << L"|   |"
 << pacient->Doctor   << L"|    "
 << pacient->Age       << L"|     "
 << pacient->Diagnoz <<L"|      "
 << pacient->Otdelenie << L"|       |" << endl;



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
vladd
Дата 5.6.2012, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Спасибо большое за помощь. Но все равно не хочет писать по русски. Снимок экрана.user posted image 
Пошли цифры теперь.

Это сообщение отредактировал(а) vladd - 5.6.2012, 13:09
PM MAIL   Вверх
vladd
Дата 5.6.2012, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Вот еще один снимок. Он показывает что не правильно считывается фамилия петров с экрана.

user posted image
PM MAIL   Вверх
vladd
Дата 5.6.2012, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Для получения русских букв у меня получился вот такой код
Код

#include <clx.h>
#pragma hdrstop
#pragma argsused
#include <iostream>
#include <locale>
#include <string>
using namespace std;
  
 //Руссификация
  ostream& operator<<(ostream &stream,char* s){
        for(char* ps=s; *ps; ps++){
                if(*ps=='ё')
                        stream<<char(241);
                else if(*ps=='Ё')
                        stream<<char(240);
                else if(*ps>=-64 && *ps<=-17)
                        stream<<char(*ps+64+128);
                else if(*ps<0)
                        stream<<char(*ps+64+176);
                else
                        stream<<*ps;
        }
        return stream;
}

int _tmain(int argc, _TCHAR* argv[])
{

string str1;
cout << "Введите строку: ";
getline(cin, str1);
cout << "Вы ввели: ";
cout << str1 << endl;
system("pause");
return 0;
}


А теперь кто подскажет. Для заполнения структуры я использовал такую строку
Код

 cin >> pacient->Bolnoy;
 
Теперь имею строку
Код

getline(cin, str1);

Вопрос. Как мне теперь заполнить структуру pacient значением  Bolnoy и другими?

Это сообщение отредактировал(а) vladd - 5.6.2012, 16:07
PM MAIL   Вверх
artsb
Дата 5.6.2012, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



А если
Код

std::wcin >> pacient->Bolnoy;



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
vladd
Дата 5.6.2012, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Спасибо. Но мой компилятор ругается. Выдает такую ошибку 
Код

[C++ Error] Unit1.cpp(148): E2015 Ambiguity between '_STL::basic_istream<wchar_t,_STL::char_traits<wchar_t> >::operator >>(bool &)' and 

'_STL::basic_istream<wchar_t,_STL::char_traits<wchar_t> >::operator >>(void * &)'

Что то с чем то не соответствует.

Это сообщение отредактировал(а) vladd - 5.6.2012, 17:03
PM MAIL   Вверх
artsb
Дата 5.6.2012, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(vladd @  5.6.2012,  17:01 Найти цитируемый пост)
Выдает такую ошибку 

На какой строке?

У меня работает:
Код

typedef struct _SS
{
    wchar_t buf[100];
    int i;
    bool b;
} SS, *PSS;

int _tmain(int argc, _TCHAR* argv[])
{
    SS s;
    PSS p;

    p = &s;

    setlocale(LC_ALL, "");
    // string
    std::wcout << L"Input string: ";
    std::wcin >> p->buf;
    std::wcout << std::endl;
    // int
    std::wcout << L"Input int: ";
    std::wcin >> p->i;
    std::wcout << std::endl;
    // bool
    std::wcout << L"Input bool: ";
    std::wcin >> p->b;
    std::wcout << std::endl;

    // result
    std::wcout << L"Result string: " << p->buf << std::endl;
    std::wcout << L"Result int: " << p->i << std::endl;
    std::wcout << L"Result bool: " << p->b << std::endl << std::endl;

    system("pause");

    return 0;
}



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
vladd
Дата 5.6.2012, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



У меня ругается на строке
Код

int _tmain(int argc, _TCHAR* argv[])


Выдаёт ошибку 
Код

E2303 Type name expected


Добавлено через 3 минуты и 7 секунд
Подключил библиотеки.Перестал ругатся.

Добавлено через 5 минут и 18 секунд
но на консоли кроме Нажмите на любую клавишу.... больше ничего.

Добавлено через 8 минут и 33 секунды
Добавил строку. Пишет цифрами.  
cout << L"Введите строку: ";
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0993 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.