Другие языки программирования и технологии

Как в C++ Писать русскими буквами в операторах вывода? Какую библиотеку подключить?

Али Махрам
Али Махрам
31
#include <locale.h>

int main()
{
setlocale(LC_ALL, "rus");
// TODO:

return 0;
}
Богдан Сабиров
Богдан Сабиров
21 360
Лучший ответ
Кроссплатформенного способа фактически нет. Стандартом C++ описан залоловочный файл <locale> и, соответственно, класс std::locale

#include <locale>

using namespace std;

void main()
{
locale loc("rus");
cout.imbue(loc);

cout << "Превед" << endl;
}

Однако реализаций, поддерживающих локаль "rus" - единицы, а там, где она поддерживается, сам компилятор при парсинге использует другую кодировку, отличную от применяемой в консоли. например,

locale loc("rus");
cin.imbue(loc);

string expected = "Привет";
string actual;
cin >> actual; // вводим в консоль "Превед"

assert(actual == expected);

легко может не пройти: скомпилированное "Превед" в одной кодировке, а прочитанное - в другой. Приём такой вот маразм распространяется даже на Unicode и UTF-8 (хотя единокод в C++ -это ещё большее горюшко-пичаль, чем русский язык, так что тут вообще получается говно в квадрате на выходе) .
В итоге конкретное решение зависит от конкретного компилятора и OC, так что гуглите.
В VC++, например, для того, чтобы кириллица выводилась правильно и введённые строки соответствовали скомпилированным, помогает Unicode (wstring, wcin, wcout) + локаль ".866"
Марат Марик
Марат Марик
9 617
1. CharToOem
2. Использовать wprintf, wcout и unicode
Про все это можно подробно почитать в гугле.
Выбери другую IDE, видимо у тебя совсем древняя.
И не ломай глаза учителю "Vvedite 4islo"
Если мы будем использовать функцию setlocale() внутри функции main()

#include
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
cout << "Русский текст" << endl;
return 0;
}

То получим вместо иероглифов нормальный русский шрифт.
как успехи?)) 6 лет прошло
setlocale(LC_ALL, "Russian");
Artur Militosyan
Artur Militosyan
86

Похожие вопросы