Visual C++. Ввод и вывод русских букв в консольном приложении C++

28.09.2011
Первое что поначалу немного мешает знакомству и обучению C++, так это кодировки. Вместо русских букв выводятся карякули, и ввод немногим лучше. Давайте посмотрим, как с этим бороться.

Вывод


С выводом всё легко, в начале функции main запишем следующую строку:
setlocale(0,"Rus");

И теперь символы кириллицы будут выводится без особых проблем.
int main( int argc, char *argv[] )

{
setlocale(0,"Rus");
std::cout<<"Привет!!!";
}

Ввод


Какое же бывает удивление начинающего программиста, когда введя вроде бы русские буквы в переменную, а при выводе этой же переменной он получает кучу вопросиков.
Решение есть, возможно не самое оптимальное, но работает корректно.
char Name[20];

SetConsoleCP(1251);
scanf("%s", Name);
SetConsoleCP(866);
std::cout<
Давайте резберём всё по строкам:
1) Объявляем переменную Name.
2) Устанавливаем кодировку в консоли на 1251.
3) Вводим переменную.
4) Устанавливаем кодировку в консоли на 866.
5) Выводим переменную на экран.
А для работы вместо типа char со string, делаем вот так:
string Name;

SetConsoleCP(1251);
std::cinName;
SetConsoleCP(866);
std::cout<
Единственно, что перед вводом русских букв надо не забывать всегда писать
SetConsoleCP(1251);

А непосредственно после ввода
SetConsoleCP(866);