С setlocale выводит крокозябры, а с SetConsoleCP все нормально

Рейтинг: 0Ответов: 1Опубликовано: 22.08.2023

вот код:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    setlocale(LC_ALL, "ru-RU");
    string s1;
    getline(cin,s1);
    if (s1.size() != 5)cout << "В слове не 5 букв";
    else cout << s1[4] << s1[3] << s1[2] << s1[1] << s1[0];
}

вводишь слово из пяти букв выводятся крокозябры

а вот так все нормально:

#include <iostream>
#include <string>
#include <windows.h>
using namespace std;

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    string s1;
    getline(cin,s1);
    if (s1.size() != 5)cout << "В слове не 5 букв";
    else cout << s1[4] << s1[3] << s1[2] << s1[1] << s1[0];
}

почему так происходит?

Ответы

▲ 1Принят

setlocale(LC_ALL, "ru-RU"); влияет на (стандартные виндовые) программы и функции, которые меняют своё поведение в зависимости от локали.

SetConsoleOutputCP(1251); меняет кодировку символов в твоём консольном окне

Короче, ничего общего.