Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Кириллица в консоли






При составлении про граммы может понадобиться вывести некоторое текстовое сообщение в консоль. И если это сообщение написано на латинице, то в командной строке Windows оно будет отображаться корректно. А если текстовое сообщение написано на кириллице, то вместо передаваемого сообщения, будет отображаться непонятная последовательность букв и символов.

Решить данную проблему можно только одним способом - перед тем, как

передать текст в консоль, необходимо его перекодировать с помощьюнастройки локали.

Локаль - это набор параметров: набор символов, язык пользователя, страна, часовой пояс и др. Локаль необходима для быстрой настройки пользовательского интерфейса, в зависимости от географического положения. В С++ есть функция setlocaleO, которая выполняет перекодировку символов в соответствии с требуемым языком. Эта функция определена в заголовочном файле < clocale>

setlocale(LC _ СТУРЕ, " rus"); / / вызов функции настройки локали

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

# include" stdafx.h"

#include < cstdio>

#include " string.h"

#include < clocale>

#include " cstdlib"

using namespace std;

int main ()

{

setlocale(LC_CTYPE, " rus"); // нефункционируетспотокомввода

charstring[20];

getss(string); // вводимC~POKY, используяКириллицу(СТРОКАСОХРАНИТСЯВПЕРЕМЕННОЙНЕКОРРЕКТНО) printf (" \nВЫВОД: %S \n", string); // ВЫВОДстрокиsystem (" pause");

returnО;

 

Для решения этой проблемы подключаем к проекту заголовочный файл < windows.h>. В файле содержатся прототипы функций SetConsoleCPO и SetConsoleOutputCPO. Функция SetConsoleCPO устанавливает нужную кодовую таблицу, на поток ввода, тогда как функция SetConsoleOutputCPO устанавливает нужную кодовую таблицу, на поток вывода.

Есть один недостаток у данных функций - они работают со шрифтом LucidaConsole. По умолчанию в консоли стоит шрифт Consolas. Поэтому в командной строке необходимо настроить используемый шрифт. Для этого открываем cmd, заходим в свойства, в закладке Шрифт выбираем Lucida Console, нажимаем ОК и на этом настройка завершена.

 

#include " stdafx.h"

#include < cstdio>

#include " string.h"

#include < clocale>

#include " cstdlib"

#include < Windows.h>

using namespace std;

int main ()

{

SetConsoleCP(1251); // установкакодовой страницыwin-cp 1251 в потокввода

SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода

charstring[20];

gets_s(string); // вводим строку, используя Кириллицу (СТРОКА СОХРАНИТСЯ В ПЕРЕМЕННОЙ НЕ КОРРЕКТНО)

рrintf(" \nвывод: %S \n", string); // выводстроки system (" pause");

returnО;

}

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.