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

Pelles c: какую библиотеку подключить, чтобы текст выводился кириллицей?

#include
#include

main (void)
{
int data;
printf("\nНачало второй мировой войны: ");
printf("\n1) 1914 год");
printf("\n2) 1939 год");
printf("\n3) 1941 год");
printf("\n-->");
scanf("%d", &data );
if ( 2 == data )
printf ( "Правильный ответ\n" );
else
printf ( "Не правильный! Верный 2.\n ");

return 0;
}
Здесь портится код. Нужно публиковать его на http://pastebin.com а сюда кидать ссылку. Или познать дзен и использовать lt и gt, тем самым обходя косяки мэйловских разработчиков.

#include <locale>

main() {
setlocale(LC_ALL, "Russian");
...
}

В нормальных компиляторах работает.
Иван Нарыжный
Иван Нарыжный
789
Лучший ответ
wchar_t юзай.
Хоть вопрос давнишний, но думаю будет полезным вот эта инфа:

"... Новая версия компилятора не требует указывать расширение имён файлов заголовков(.h), НО ОБЯЗАТЕЛЬНО требуется объявлять пространство имён std. ЕСЛИ У ВАС ПРИ КОМПИЛЯЦИИ возникают ошибки с указанием на эти строки, ЗНАЧИТ У ВАС СТАРАЯ ВЕРСИЯ КОМПИЛЯТОРА" (по мнению автора книги), и компилятору надо указывать так:

#include <iostream.h> // указываем расширение имени файла заголовков .h

// using namespace std; /* исключаем строку, объявляющую область пространства имён языка С++, необходимых для новой версии языка и компилятора*/

"Русификация" текста в консоли и в программе, основывается на:
1. поддержке операционной системой национальной кодовой страницы;
2. поддержке компилятором национальной кодовой страницы.
Без этих двух одновременных поддержек, танцы с бубном будут с переменным успехом.
===
Для языка С:
#include <locale.h> /* Для корректного отображения
кирилицы в программе, включаем этот файл заголовков,
размещаем первым */
#include <stdio.h>
int main(void) {
setlocale(LC_ALL, ""); /*Для корректного отображения
кирилицы в исполняемой программе, инициализируем*/

LC_ALL, "" - пустые кавычки, означают, что по умолчанию задаётся языковой стандарт текущей операционной системы (наша русская). Если французская локализация, то и кодовая страница от операционной системы будет французская, то есть, наша прога во французской локализации напечатает кракозябры. Значит для каждой "ЧУЖОЙ" локализации надо включать в программу набор текстов на локализуемых языках и указывать программе на них.
===

ЕЩЁ КУЧА инфы от авторитета:

/*Setlocale (LC_ALL, ""); Задает языковой стандарт по умолчанию,
т.е. заданную по умолчанию для пользователя кодовую страницу ANSI,
полученную от операционной системы. Имя языкового стандарта
задается значением GetUserDefaultLocaleName, возвращаемым.
Кодовая страница имеет значение, возвращаемое GetACP.
ссылка на ресурс Майкрософт :
https://learn.microsoft.com/ru-ru/cpp/c-runtime-library/reference/setlocale-wsetlocale?view=msvc-170

Задает язык, указанный в параметре <language>, и использует страну или регион по умолчанию для указанного языка и кодовую страницу ANSI по умолчанию для этой страны или региона, полученную из операционной системы узла. Например, следующие вызовы setlocale функционально эквивалентны:

setlocale( LC_ALL, "en-US" );

setlocale( LC_ALL, "English" );

setlocale( LC_ALL, "English_United States.1252" );

Рекомендуется использовать первую форму для обеспечения производительности и простоты обслуживания.

Эта категория должна быть LC_ALL или LC_CTYPE для реализации изменения кодовой страницы. Например, если страной или регионом по умолчанию и языком операционной системы узла являются "United States" и "English", следующие два вызова setlocale функционально эквивалентны:

setlocale( LC_ALL, ".1252" );

setlocale( LC_ALL, "English_United States.1252");

Дополнительные сведения см. в директиве setlocale pragma в справочнике по препроцессору C/C++.