Вечная проблема :-)
Каждый начинающий виндовый С++ программист должен пройти через это!
1. Виндовая командная строка по умолчанию имеет кодировку cp866 (да-да, не cp1251). Не рекомендую выводить в UTF8, т.к. cmd до сих пор коряво работает с этой кодировкой.
2. cmd и консоль powershell - это разные консоли
3. Компилятор и стандартная библиотека (cin/cout) никак не конвертируют кодировки при вводе/выводе.
(Возможно преобразование можно как-то задать, но по умолчанию это не делается.)
4. Компилятор никак не преобразует ваши текстовые строки в программе при сборке, т.е. в какой кодировке вы написали строковую константу, та же кодировка будет выведена на консоль. Таким образом - имеет значение в какой кодировке у вас исходники!
5. Кодировку в консоли можно поменять из самой консоли командой chcp. Часто так и делают. В русской винде 2 широко используемые кодировки консоли: cp866 и cp1251. Не стоит надеяться на то, что программа всегда будет запускаться только при одной кодировке.
Исходя из вышенаписанного:
1. Исходники всегда пишем в UTF8
2. Перед выводом всегда преобразуем UTF8 в кодировку консоли. После ввода - то же самое. Есть соответствующие функции в WinAPI.
3. Никогда не меняем принудительно кодировку консоли - это не удобно пользователям программы
Для самого простого варианта - вы можете написать исходники в cp866 и по умолчанию в cmd у вас все будет нормально с кодировками.
Удачи!