Это практически первый вопрос, которым задаются юниоры С++, когда пытаются запустить свою первую консольную программу под виндой.
Ответов на него тут уже была целая пачка.
Суть в том, что в виндовой консоли может быть 2 русские кодировки (cp866 и cp1251) (не уверен, но может быть консоль винды научилась уже нормально работать с UTF8, если научилась, то считайте, что добавилась еще одна кодировка). Причем по умолчанию используется cp866. Кодировку консоли можно менять из самой консоли или программно.
При выводе текста в консоль никаких преобразований кодировок не происходит. В какой кодировке у вас написаны исходники - та и выводится. И если кодировка консоли и кодировка исходников не совпадают, то будет не читабельный текст.
Самый оптимальный и самый сложный вариант - в программе узнать кодировку консоли и перед выводом конвертировать текст в эту кодировку. Так же обратную операцию производить при вводе. В этом случае исходники программы лучше всего писать в UTF8 и использовать wchar_t.
Самый простой, дебильный и не всегда работающий (не будет работать если изменена кодировка консоли) - писать исходники в cp866.
Немного чуть более сложный, но не правильный - поменять кодировку консоли из программы на ту в которой написаны исходники.
Самый надежный вариант - не используйте русский в консольных программах - только английский. Сомневаюсь, что вам придется когда-то писать профессиональные консольные утилиты, которые бы умели адаптироваться к разным кодировкам, так что, возможно, нет смысла углубляться в эту тему. В GUI приложениях этой проблемы нет.