Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2012, 14:43   #1
svkpro
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 52
По умолчанию русские символы в консоли С++

честно говоря я думал что эту тему давно исчерпал, а нет))
значит меню выводит на русском, файлы на русском читает и выводит правильно но при попытке ввести данные с клавиатуры - абракадабра)
вот что пробовал:
Код:
locale::global(locale(""));
setlocale( LC_ALL,"Rus" );
setlocale( LC_ALL,"Russian" );
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
может есть еще варианты?
svkpro вне форума Ответить с цитированием
Старый 03.12.2012, 15:16   #2
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Нужно использовать символьный массив с двумя байтами на один элемент - это Unicode. А вы пытаетесь кириллицу запихнуть в ANSI массив, где 1 байт на один элемент, и годен он вроде только для английского языка и стандартных символов.

Ещё можно использовать CharToOem функцию, в гугле полно инфы о ней.

Последний раз редактировалось hvz-; 03.12.2012 в 15:28. Причина: Добавил
hvz- вне форума Ответить с цитированием
Старый 03.12.2012, 15:19   #3
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

getline используете? Вам должно помочь

Код:
setlocale(LC_ALL, "RUSSIAN.1251")
Xardas вне форума Ответить с цитированием
Старый 03.12.2012, 15:38   #4
svkpro
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 52
По умолчанию

может подскажете как применить getline к этому коду:
Код:
while(true){
	cin>>str1;
	cin>>str2;
	cin>>str3;
	cin>>str4;
	cin>>str5;
	cout<<endl;
	push(str1,str2,str3,str4,str5);
	show_stack();
я пробовал добавить библиотеку <string> и вот так getline(cin,str1), cin.getline(str1,4); не пошло((( может я не правильно ее использую?
getline(cin,str1) - компилятор ругается
cin.getline(str1,4) - вроде пошло, только выводит все равно абракадабру)

Последний раз редактировалось svkpro; 03.12.2012 в 15:55.
svkpro вне форума Ответить с цитированием
Старый 03.12.2012, 15:54   #5
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

Функция getline описана в istream (ну или #include <iostream> вполне достаточно). Что значит не пошло? Ошибки какие-то или что? Покажите как пробовали
Xardas вне форума Ответить с цитированием
Старый 03.12.2012, 15:57   #6
svkpro
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 52
По умолчанию

getline(cin,str1) - компилятор ругается
cin.getline(str1,4) - вроде пошло, только выводит все равно абракадабру)
svkpro вне форума Ответить с цитированием
Старый 03.12.2012, 16:00   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

установите сначала для потоков кодировку через cin.imbue и т.д.
p51x вне форума Ответить с цитированием
Старый 03.12.2012, 16:01   #8
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

Цитата:
компилятор ругается
Матом?

Можно ж с первого раза максимально полно описать проблему. Если есть ошибка, то привести текст этой ошибки... Чем качественнее Вы опишите свою проблему, тем качественнее Вам и помогут.

От "абрыкадабры" должны помочь параметры setlocale, указанные мной выше, проверял на VS2010
Xardas вне форума Ответить с цитированием
Старый 03.12.2012, 16:02   #9
svkpro
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 52
По умолчанию

а можно немножко по подробней?) про cin.imbue

я тоже компилирую в VS2010 не берет русские символы и все)

Последний раз редактировалось Stilet; 03.12.2012 в 19:25.
svkpro вне форума Ответить с цитированием
Старый 03.12.2012, 16:10   #10
svkpro
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 52
По умолчанию

вот проблема целиком:
Код:
typedef struct kniga { 
char shifr[4]; 
char avtor[15]; 
char nazv[15];
char izdat[15];
char god[6];
struct kniga* next; 
 } Kniga;

Kniga* top = NULL;
int t;

void push(char* shifr, char* avtor, char* nazv, char* izdat, char* god)//добавление 
 {
	 if(t>=20)cout<<"стек полон!"<<endl;
	 Kniga* ptr = (Kniga *)malloc(sizeof(Kniga)); 
	 strcpy(ptr->shifr,shifr);
	 strcpy(ptr->avtor,avtor); 
	 strcpy(ptr->nazv,nazv);
	 strcpy(ptr->izdat,izdat);
	 strcpy(ptr->god,god);
	 ptr->next = top;
	 t++;
	 cout<<"элемент успешно добавлен в стек!"<<endl<<endl;
	 top = ptr;
	 
 }
а вот заполнение с консоли:
Код:
char str1[4]; 
char str2[15];
char str3[15];
char str4[15];
char str5[6];
switch((ch_key = _getch()))
        {
//заполнение стека с консоли
        case '1':system("cls");
	        while(true){
		cin>>str1;
		cin>>str2;
		cin>>str3;
		cin>>str4;
		cin>>str5;
		cout<<endl;
		push(str1,str2,str3,str4,str5);
		show_stack();
вот с консоли то оно и заполняет только на английском, на русском абышто)
хотя с файла все хорошо.

Последний раз редактировалось svkpro; 03.12.2012 в 16:13.
svkpro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Idhttp.get и русские символы в запросе Pter Работа с сетью в Delphi 7 28.08.2012 16:37
Русские буквы в \u символы J-Max Общие вопросы Delphi 4 01.07.2012 19:35
Русские символы в консоле pimple2006 Общие вопросы Delphi 2 16.12.2011 10:50
Русские символы Akord Общие вопросы C/C++ 0 26.09.2010 11:17
Русские буквы в консоли. Cpluser Общие вопросы C/C++ 5 07.10.2009 16:55