Проблемы, связанные с отображением символов русского алфавита в консоли возникают наверное у каждого, кто начинает изучать программирование на C++, а понять как её решить бывает довольно тяжело.
Эта проблема возникает из-за разницы в кодировках между Windows и консолью. В то время как система использует кодировку cp1251, консоль продолжает пользоваться старой кодировкой cp866, унаследованной от MS-DOS.
Одним из распространённых вариантов решения проблемы является смена шрифта консоли со стандартного Consolas на Lucida Console, однако помогает это не всегда.
Шрифт меняется в свойствах консоли, в разделе Шрифт. Попасть туда можно через контекстное меню в самом окне консоли.
Если первый способ не помог, то можно провести простые манипуляции с кодом разрабатываемой программы.
Проблемы вывода текста на экран решаются установкой соответствующей локали для консоли.
Локаль - это набор региональных параметров пользовательского интерфейса, таких как страна, набор символов, часовой пояс и т.д. используемый для быстрой его настройки в зависимости от географического положения пользователя.
Для того, чтобы консоль начала корректно отображать символы русского алфавита, необходимо в начале программы написать команду setlocale(LC_CTYPE, "rus");
Это решает проблему лишь отчасти, так как не затрагивает то, что пользователь вводит с клавиатуры. В результате, консоль выводит только то, что было прописано в программе заранее, но не введённую вручную строку.
Для полного решения проблемы следует добавить ещё 2 команды, которые позволят вручную установить нужную кодировку для потоков ввода и вывода:
- Для потока ввода это SetConsoleCP(1251);
- Для потока вывода это SetConsoleOutputCP(1251);
Для использования этих команд, необходимо подключить дополнительный заголовочный файла Windows.h, при помощи директивы #include <windows.h>
Таким образом можно легко решить одну из самых распространённых проблем, встречающихся при освоении языка программирования C++. Если вы знаете какие-либо ещё способы, напишите пожалуйста о них в комментариях).