Проблема состоит в том, что в Windows в консоли кодировка CP866, а кодировка файлов либо CP1251 либо UTF-8.
У меня кодировка файлов UTF-8 и изначально работал ввод русского текста а вот вывод был кракозябрами. Вывод мне удалось починить, а ввод - поломать. Тем не менее прилагается несколько способов лечения кодировок ввода-вывода.
#include <iostream> // std::cout
#include <windows.h> // SetConsoleOutputCP()
using namespace std;
int main(){
SetConsoleCP(CP_UTF8); // Кодировка на ввод (866, 65001, 1251 не помогает, установка Lucida console тоже)
SetConsoleOutputCP(CP_UTF8); // Кодировка на вывод (можно 65001 или CP_UTF8)
cout << "Привет \n"; //Привет
string str;
cin >> str; // мир
cout << str; // (выводятся пробелы, с английскими словами нормально работает)
}
#include <iostream> // std::cout
#include <cstdlib> // system()
using namespace std;
int main(){
system("chcp 65001"); // Active code page: 65001 (Устанавливает UTF-8)
system("cls"); // Очищает окно от предыдущего вывода
cout << "Привет \n"; //Привет
string str;
cin >> str; // мир
cout << str; // (выводятся пробелы, с английскими словами нормально работает)
}
Данный способ работает даже при выводе QT в окне "Вывод приложения", но потребуется заменять cout на wcout и перед строкой вписывать литеру L.
#include <iostream> // wcout, endl
using namespace std; // Чтобы не писать std::
int main(){
setlocale(LC_ALL, ""); // Устанавливает русскую кодировку
wcout << L"Привет" << endl; //Привет
}