Во первых, лучше чтобы все файлы исходного кода были в Unicode (utf16). Так все русские (и другие) буквы, переживут компиляцию нормально.
Во вторых, для работы с такими строками в стандартной библиотеке есть классы wcout, wstring и так далее, ими и пользуйтесь.
В чем проблема функции setlocale? В том что она делает правильным вывод на консоль, а читать будет русский с консоли как кракозябры.
Вот правильный способ:
// Кодировка Unicode
#include <iostream>
#include <string>
int main() {
// Устанавливаем кодовую страницу как у пользователя на компьютере
std::locale::global(std:: locale(".OCP"));
// Строки с юникодом должны начинаться с префикса L
std::wcout << L"Русский текст в консоли";
}