Кодировка в консоли и локаль

int main() {
    //setlocale(LC_ALL, "ru");

    std::string X;
    std::cin >> X;
    
    std::cout << "Привет" << std::endl << X;


    return 0;
}

В это случае, если ввести в переменную X кириллицу, то "Привет" выведется непонятным набором символов, строка X выведется правильно.

int main() {
    setlocale(LC_ALL, "ru");

    std::string X;
    std::cin >> X;
    
    std::cout << "Привет" << std::endl << X;


    return 0;
}

Здесь же произойдет все наоборот: "Привет" выведется верно, а наша строка непонятно, почему так происходит? установка локали позволяет выводить в консоль кириллицу, но из ввода - нет. Разве она не добавляет в кодировку нужный алфавит(кроме форматирования дат и т.п)? И в итоге помимо установки локали нужно дополнительно прописать SetConsoleCP(1251), чтобы из ввода мы могли получать кириллицу.

P.S. А если мы установили нужную локаль, нужно ли прописывать SetConsoleOutputCP?


Ответы (0 шт):