Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Вывод и ввод широких символов
Прежде чем выводить широкие символы нужно настроить локаль с помощью функции setlocale()
:
// #include <clocale>
std::setlocale(LC_ALL, "Russian_Russia.1251");
или с помощью функции _wsetlocale()
:
_wsetlocale(LC_ALL, L"Russian_Russia.1251");
Для вывода широких символов и L-строк в языке C++ предназначены объекты wcout
, wcerr
и wclog
, объявленные в файле iostream
. Объект wcout
используется для вывода обычных сообщений в окно консоли. Объекты wcerr
и wclog
применяются для вывода сообщений об ошибках. Также как и объект wcout
объекты wcerr
и wclog
первоначально связаны с окном консоли, однако возможно перенаправить поток на другое устройство или в файл. Прежде чем использовать объекты, необходимо подключить файл iostream
с помощью директивы #include
:
#include <iostream>
Пример вывода широкого символа и L-строки:
_wsetlocale(LC_ALL, L"Russian_Russia.1251");
std::wcout << L'п' << std::endl; // п
std::wcout << L"Строка" << std::endl; // Строка
Для вывода широких символов можно использовать функцию putwchar()
. Прототип функции:
#include <cwchar> /* или #include <wchar.h> */
wint_t putwchar(wchar_t ch);
Пример вывода символа:
_wsetlocale(LC_ALL, L"Russian_Russia.1251");
wchar_t ch = L'п';
std::putwchar(ch); // п
Можно также воспользоваться спецификаторами %lc
и %C
в функции printf()
:
_wsetlocale(LC_ALL, L"Russian_Russia.1251");
wchar_t ch = L'п';
std::printf("%lc\n", ch); // п
std::printf("%C\n", ch); // п
Для ввода широкого символа в языке C++ следует использовать объект wcin
. Прежде чем использовать объект wcin
необходимо подключить файл iostream
с помощью директивы #include
:
#include <iostream>
Пример получения широкого символа:
_wsystem(L"chcp 1251"); // Смена кодировки консоли
_wsetlocale(LC_ALL, L"Russian_Russia.1251");
wchar_t ch = L'\0';
std::wcout << "ch = "; // Вывод подсказки
std::wcout.flush(); // Сброс буфера
std::wcin >> ch; // Получение символа
std::wcout << ch << std::endl; // Вывод символа
std::wcout << (unsigned)ch
<< std::endl; // Вывод кода
Можно также воспользоваться методом get()
объекта wcin
:
ch = std::wcin.get(); // Получение символа
std::wcin.get(ch); // Получение символа
Для ввода широкого символа в языке C используется функция getwchar()
. Прототип функции:
#include <cwchar> /* или #include <wchar.h> */
wint_t getwchar(void);
Пример:
ch = std::getwchar(); // Получение символа
Функция getwchar()
позволяет получить символ только после нажатия клавиши <Enter>. Если необходимо получить символ сразу после нажатия клавиши на клавиатуре, то можно воспользоваться функциями _getwche()
и _getwch()
. Прототипы функций:
#include <cwchar> /* или #include <wchar.h>
или #include <conio.h> */
wint_t _getwche(void);
wint_t _getwch(void);
Функция _getwche()
возвращает код символа и выводит его на экран. При нажатии клавиши на клавиатуре функция _getwch()
возвращает код символа, но сам символ на экран не выводится. Это обстоятельство позволяет использовать функцию _getwch()
для получения конфиденциальных данных (например, пароля). Следует учитывать, что код символа возвращается и при нажатии некоторых служебных клавиш, например, <Home>, <End> и др. Пример:
_wsystem(L"chcp 1251"); // Смена кодировки консоли
_wsetlocale(LC_ALL, L"Russian_Russia.1251");
wchar_t ch = L'\0';
std::wcout << "ch = "; // Вывод подсказки
std::wcout.flush(); // Сброс буфера
ch = _getwch(); // Получение символа
std::wcout << ch << std::endl; // Вывод символа
std::wcout << (unsigned)ch
<< std::endl; // Вывод кода
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов