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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 04.03.2010, 13:24   #1
sde
Новичок
Джуниор
 
Регистрация: 09.10.2009
Сообщений: 7
По умолчанию Ввод и вывод русских букв в консоли

Получается выводить русские буквы в консоли, но если ввести данные запрашиваемые программой на русской раскладке то затем выводится крякозябра.
Как сделать чтобы и после ввода данных на руской раскладке выводилось тоже правильно?


Код:
#include "stdafx.h"
#include <iostream>
#include <locale>
#include <string>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, "Russian");

	string full_name, nickname, address;
	string greeting ("Здравствуйте, ");

	cout << "Введите Ваше имя: ";
	getline(cin, full_name);
	cout << "Ваше имя: " << full_name << endl;

	cout << "Введите Ваш псевдоним: ";
	cin >> nickname;
	greeting += nickname;
	cout << greeting << endl;

	cout << "Введите Ваш адрес в несколько строк\n";
	cout << "Окончание ввода символ '$'\n";
	getline(cin, address, '$');
	cout << "Ваш адрес: " << address << endl;

	system("pause");
	return 0;
}
sde вне форума
Старый 04.03.2010, 13:58   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Простых решений я не знаю, но вот сложное и работающее однажды придумал:
http://trivialcoding.ru/Programs/Bor...c-builder.html
Использовалось в Билдере, но по идее должно получиться в любой IDE.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума
Старый 04.03.2010, 14:24   #3
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

Код:
#include <iostream>
#include <string.h>
#include <locale>
#include <wchar.h>

using namespace std;

int main() {

    setlocale(LC_ALL,"");

    wchar_t st[30];

    wcout<<L"Введите строку"<<endl;
    wcin.getline(&st[0],30);

    wcout<<L"Введена строка: "<<st<<endl;

    return 0;
}

Последний раз редактировалось Indian; 04.03.2010 в 14:41.
Indian вне форума
Старый 04.03.2010, 15:09   #4
sde
Новичок
Джуниор
 
Регистрация: 09.10.2009
Сообщений: 7
По умолчанию

Гром, решение действительно непростое... )
Но статья определенно интересна. Попробую. Спасибо.

Indian, код который выложен: Последний раз редактировалось Indian; Сегодня в 14:41 не работает.
Будет крякозябра.
sde вне форума
Старый 04.03.2010, 15:54   #5
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

chcp("1251")

и изменить шрифт по умолчанию на Lucida Console
Namolem вне форума
Старый 04.03.2010, 16:16   #6
sde
Новичок
Джуниор
 
Регистрация: 09.10.2009
Сообщений: 7
По умолчанию

Namolem, если так, то вместо надписи "Введите строку: ", будет аброкадабра:

#include "stdafx.h"
#include <iostream>
#include <locale>
#include <string>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "1251");

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

system("pause");
return 0;
}
sde вне форума
Старый 18.05.2010, 17:11   #7
RiM90
Новичок
Джуниор
 
Регистрация: 18.05.2010
Сообщений: 2
По умолчанию

у меня сработал вот такой довольно простой способ:
setlocale(LC_ALL, ".1251");
printf("Привет!");
int cp=GetConsoleCP();
SetConsoleCP(1251);
char word[10];
scanf("%s", word);
SetConsoleCP(cp);
то есть, для вывода русских символов задаем кодировку с помощью setlocale, а для ввода - с помощью SetConsoleCP. после применения scanf возвращаем кодировку консоли в исходное состояние, чтобы дальнейшие printf с русскими буквами отображались нормально.
RiM90 вне форума
Старый 18.05.2010, 22:35   #8
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Некропостингом не занимайтесь!
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума
Старый 20.05.2010, 02:04   #9
RiM90
Новичок
Джуниор
 
Регистрация: 18.05.2010
Сообщений: 2
По умолчанию

чем, простите?
RiM90 вне форума
Старый 20.05.2010, 02:10   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

теме два месяца уже.
она мертва(некро - Смерть,мертвый)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не выводит русских букв didzial Общие вопросы C/C++ 17 14.01.2010 12:04
Фильтр русских букв lavelas Помощь студентам 3 22.12.2009 06:32
Корректное отображение русских букв. TheWanderer Общие вопросы C/C++ 2 17.11.2008 21:03
Ввод русских букв в Delphi Аццкий Нуп Помощь студентам 3 25.06.2008 23:27
Регистр для русских букв Kulibim Общие вопросы Delphi 2 28.10.2007 17:36