Top.Mail.Ru
Ответы
Аватар пользователя
8лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Как сделать русский язык в консоли при отображении введенной кириллицы (с++)

Отображаемый текст в консольном приложении на русском языке.
В программе присутствует ввод со стороны пользователя, всё на русском.

Так вот присутствует безысходное состояние когда при использовании cout <<
русский текст отображается отлично если я в кавычках где строка использую русский текст.

Но, там где я использую cin >> и все данные записываю в текстовую переменную после её дальнейшего вывода на экран получается кракозябра,

К примеру:

std::string name;
cout << "Введите ваше имя: " ;
cin >> name;

cout << "Ваше имя: "<< name;

Что я в результате получаю на экране:
Введите ваше имя: Архис
Ваше имя: @قسKسRسbra

Загвоздка в том, что когда я использую одну функцию в программе не считая мэйна все работает хорошо, но когда подключаю другие функции в которых также присутствуют отображение русского текста то в них получается кракозябра, ниже на скринах я пытался решить эту проблему, и скрины соответствуют полученным отрицательным и "положительным" результатам:

1) код:

#include
#include
#include
#include
#define gotoxy(x, y) SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), (COORD){x, y})

void enter_data(void);

int main()
{
enter_data();

return 0;
}

void enter_data()
{
using namespace std;

string name;
cout << Rus("Введите ваше имя: ");
cin >> name;
cout << name;
}

результат позитивный.

Но если усложнить программу добавив к примеру хотябы одну функцию где также присутствует русский текст то получаем кракозябру в той функции, можно это увидеть на втором скрине.

Пробуя решить проблему как порядочный начинающий программист добавил в инклуды locale
и в майне прописал setlocale(LC_ALL, "Russian"); результат на 3 скрине

также, пробовал решить проблемму другим способом
удалив setlocale(LC_ALL, "Russian"); но добавив

SetConsoleCP (1251);
SetConsoleOutputCP(1251);

в результате кракозябра в вводе, и дальнейшем выводе, это можно увидеть на 4-м скрине.
Дальше я пытался поменять значения с 1251 на 866 - результат как на скрине номер два.

Потом я отчаялся полностью и решил совместить SetConsoleCP (1251);
SetConsoleOutputCP(1251); и setlocale(LC_ALL, "Russian"); и даже при этом менял значения с 1251 на 866 результаты отрицательные, или шапка программы отображается не корректно или выводимые символы как на скрине номер 3.

Если у вас есть дельный совет, буду рад услышать, хочу довести эту программу до полной работоспособности.

Заранее спасибо за дельные советы

Модераторы, в подобном вопросе который задавал несколько минут назад перепутал категорию, его пожалуйста удалите

По дате
По рейтингу
Аватар пользователя
Просветленный
8лет

используй SetConsoleCP и SetConsoleOutputCP
без setlocale

установи шрифт консоли Lucida Console или Consolas в настройках консоли