Перейти к содержимому

Lc all c что это

  • автор:

setlocale , _wsetlocale

Устанавливает или извлекает языковой стандарт времени выполнения.

Синтаксис

char *setlocale( int category, const char *locale ); wchar_t *_wsetlocale( int category, const wchar_t *locale ); 

Параметры

category
Категория, на которую влияет языковой стандарт.

locale
Указатель языкового стандарта.

Возвращаемое значение

Если задано допустимое locale и category задано, функции возвращают указатель на строку, связанную с указанным locale и category . locale Если аргумент равен NULL , функции возвращают текущий языковой стандарт.

Если недопустимый аргумент передается в любую функцию, возвращается NULL возвращаемое значение. Поведение недопустимых аргументов выглядит следующим образом:

Функция Недопустимый параметр Недопустимый обработчик, вызываемый как описано в разделе «Проверка параметров» Задает errno
setlocale category yes yes
setlocale locale no no
_wsetlocale category yes yes
_wsetlocale locale no no
setlocale( LC_ALL, "en-US" ); 

задает все категории, возвращая только строку

en-US 

Можно скопировать строку, возвращенную setlocale , для восстановления этой части данных о языковом стандарте программы. Глобальное или локальное хранилище потока используется для строки, возвращаемой setlocale . Последующие вызовы setlocale перезаписывают эту строку, что аннулирует указатели строк, возвращенные предыдущими вызовами.

Замечания

Используйте функцию setlocale для задания, изменения или получения некоторой или всей информации о языковом стандарте текущей программы, определяемой locale и category . locale ссылается на расположение (страну или регион и язык), для которого можно настраивать определенные аспекты программы. К некоторым категориям, зависящим от языкового стандарта, относится формат дат и отображения денежных значений. Если для locale задается строка по умолчанию для языка с несколькими формами, которые поддерживаются на вашем компьютере, необходимо проверять возвращаемое значение setlocale , чтобы узнать, какой язык применяется. Например, если задано locale «chinese» значение возвращаемого значения, может быть либо «chinese-traditional» «chinese-simplified» .

_wsetlocale — это версия с расширенными символами для setlocale ; аргумент locale и возвращаемое значение _wsetlocale являются строками с расширенными символами. Поведение _wsetlocale и setlocale идентично в противном случае.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью «Глобальное состояние» в CRT.

Сопоставления подпрограмм универсального текста

TCHAR.H Обычной _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_tsetlocale setlocale setlocale _wsetlocale

Аргумент category указывает части информации о языковом стандарте программы, которые подвергаются влиянию. Макросы, используемые для category и части программы, на которые они оказывают, указаны ниже.

Флаг category Область применения
LC_ALL Все категории, перечисленные ниже.
LC_COLLATE Функции strcoll , _stricoll , wcscoll , _wcsicoll , strxfrm , _strncoll , _strnicoll , _wcsncoll , _wcsnicoll и wcsxfrm .
LC_CTYPE Функции обработки символов (за исключением isdigit , isxdigit , mbstowcs и mbtowc , которые не затрагиваются).
LC_MONETARY Информация о форматировании денежных значений, возвращаемая функцией localeconv .
LC_NUMERIC Символ десятичной запятой для отформатированных выходных подпрограмм (например printf , для подпрограмм преобразования данных) и для немонетарных сведений о форматировании, возвращаемых localeconv . Помимо символа десятичной запятой, LC_NUMERIC задает разделитель тысяч и строку управления группировкой, возвращаемую localeconv .
LC_TIME Функции strftime и wcsftime .

Эта функция проверяет параметр категории. Если параметр категории не является одним из значений, заданных в предыдущей таблице, вызывается обработчик недопустимых параметров, как описано в разделе «Проверка параметров». Если выполнение может быть продолжено, эта функция задает для errno значение EINVAL и возвращает NULL .

Аргумент locale является указателем на строку, которая задает языковой стандарт. Сведения о формате аргумента locale см. в строках языков, языков и стран и регионов. Если locale указывает на пустую строку, языковой стандарт соответствует исходной среде, определенной реализацией. Значение C задает минимальную подходящую ANSI среду для переноса C. Языковой стандарт C предполагает, что все типы данных char соответствуют 1 байту, а их значение всегда меньше 256.

При запуске программы выполняется эквивалент следующего оператора:

setlocale( LC_ALL, «C» );

Аргумент locale может принимать имя языкового стандарта, строковую переменную с названием языка, строковую переменную с названием языка и код страны или региона, кодовую страницу или строковую переменную с названием языка, код страны или региона и кодовую страницу. Доступные имена языков, языки, коды стран и регионов и кодовые страницы включают все те, которые поддерживаются API NLS Windows. Набор имен языкового стандарта, поддерживаемых setlocale в строках языков, языков и регионов. Набор строк языка и страны или региона, поддерживаемых setlocale в строках языка и регионе, перечислены в строках языка и странах или регионах. Рекомендуется использовать форму имени языкового стандарта для обеспечения производительности и удобства поддержки строк языкового стандарта, внедренных в код или сериализованных в хранилище. Строковые значения имен языкового стандарта реже подвергаются изменению обновлением операционной системы, чем язык и форма названия страны или региона.

Указатель null, который передается в качестве аргумента locale , указывает setlocale выполнить запрос, а не задать международную среду. locale Если аргумент является пустым указателем, текущий языковой стандарт программы не изменяется. Вместо этого setlocale возвращает указатель на строку, связанную с category текущего языкового стандарта этого потока. Если аргумент category имеет значение LC_ALL , функция возвращает строку, которая указывает текущий параметр каждой категории с разделением точкой с запятой. Например, последовательность вызовов

// Set all categories and return "en-US" setlocale(LC_ALL, "en-US"); // Set only the LC_MONETARY category and return "fr-FR" setlocale(LC_MONETARY, "fr-FR"); printf("%s\n", setlocale(LC_ALL, NULL)); 
LC_COLLATE=en-US;LC_CTYPE=en-US;LC_MONETARY=fr-FR;LC_NUMERIC=en-US;LC_TIME=en-US 

и это строка, связанная с категорией LC_ALL .

Следующие примеры относятся к категории LC_ALL . Любая из строк «. OCP» и «. ACP» можно использовать вместо номера кодовой страницы, чтобы указать использование пользовательской кодовой страницы OEM по умолчанию и кодовой страницы ANSI по умолчанию для этого языкового стандарта соответственно.

  • setlocale( LC_ALL, «» ); Задает языковой стандарт по умолчанию, т.е. заданную по умолчанию для пользователя кодовую страницу ANSI, полученную от операционной системы. Имя языкового стандарта присваивается значению, возвращаемого GetUserDefaultLocaleName . Кодовая страница имеет значение, возвращаемое GetACP .
  • setlocale( LC_ALL, «.OCP» ); Задает языковой стандарт на текущую кодовую страницу OEM, полученную из операционной системы. Имя языкового стандарта присваивается значению, возвращаемого GetUserDefaultLocaleName . Кодовая страница имеет LOCALE_IDEFAULTCODEPAGE значение для имени языкового GetLocaleInfoEx стандарта по умолчанию по умолчанию.
  • setlocale( LC_ALL, «.ACP» ); Задает языковой стандарт согласно текущей кодовой странице ANSI, полученной от операционной системы. Имя языкового стандарта присваивается значению, возвращаемого GetUserDefaultLocaleName . Кодовая страница имеет LOCALE_IDEFAULTANSICODEPAGE значение для имени языкового GetLocaleInfoEx стандарта по умолчанию по умолчанию.
  • setlocale( LC_ALL, «» ); Задает языковой стандарт для имени языкового стандарта, указанного . Кодовая страница имеет LOCALE_IDEFAULTANSICODEPAGE значение для указанного имени языкового стандарта по GetLocaleInfoEx .
  • setlocale( LC_ALL, «_» ); Задает языковой стандарт для языка и страны или региона, указанных и вместе с кодовой страницей по умолчанию, полученной из операционной системы узла. Кодовая страница имеет LOCALE_IDEFAULTANSICODEPAGE значение для указанного имени языкового стандарта по GetLocaleInfoEx .
  • setlocale( LC_ALL, «_.» ); Задает языковой стандарт на язык, страну или регион и кодовую страницу, указанную строкой и строкой. Можно использовать различные сочетания языка, страны или региона и кодовой страницы. Например, этот вызов устанавливает языковой стандарт «французский (Канада)» с кодовой страницей 1252. setlocale( LC_ALL, «French_Canada.1252» ); Этот вызов устанавливает языковой стандарт «французский (Канада)» с кодовой страницей по умолчанию ANSI. setlocale( LC_ALL, «French_Canada.ACP» ); Этот вызов устанавливает языковой стандарт «французский (Канада)» с кодовой страницей по умолчанию OEM. setlocale( LC_ALL, «French_Canada.OCP» );
  • setlocale( LC_ALL, «» ); Задает языковой стандарт языку, указанному по умолчанию, и использует страну или регион по умолчанию для указанного языка и кодовую страницу ANSI по умолчанию для этой страны или региона, полученной из операционной системы узла. Например, следующие вызовы setlocale функционально эквивалентны: setlocale( LC_ALL, «en-US» ); setlocale( LC_ALL, «English» ); setlocale( LC_ALL, «English_United States.1252» ); Рекомендуется использовать первую форму для обеспечения производительности и простоты обслуживания.
  • setlocale( LC_ALL, «.» ); Задает кодовую страницу для значения, указанного в кодовой странице вместе с страной или регионом по умолчанию и языком (как определено операционной системой узла) для указанной кодовой страницы.

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

setlocale( LC_ALL, «.1252» );

setlocale( LC_ALL, «English_United States.1252»);

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

Функция _configthreadlocale используется для управления тем, влияет ли setlocale языковой стандарт всех потоков в программе или только языковой стандарт вызывающего потока.

Поддержка UTF-8

Начиная с Windows 10 версии 1803 (10.0.17134.0), универсальная среда выполнения C поддерживает использование кодовой страницы UTF-8. Это означает, что строки, передаваемые функциям среды выполнения C, char могут ожидать строки в кодировке UTF-8. Чтобы включить режим UTF-8, используйте «.UTF8» в качестве кодовой страницы при использовании setlocale . Например, setlocale(LC_ALL, «.UTF8») использует текущую кодовую страницу Windows ANSI (ACP) для языкового стандарта и UTF-8 для кодовой страницы.

Строка для указания режима UTF-8:

  • Не учитывает регистр.
  • Дефис ( — ) является необязательным
  • Он должен находиться на кодовой странице имени языкового стандарта, поэтому должен иметь ведущее значение ( . например, в следующих примерах): «en_US.UTF8» «.utf8»

В следующих примерах показано, как указать строку UTF-8:

После вызова setlocale(LC_ALL, «.UTF8») вы можете передать «��» mbtowcs и правильно преобразовать его в wchar_t строку. Ранее для этого перевода не был доступен параметр языкового стандарта.

Режим UTF-8 также включен для функций, которые исторически переведены char строки с помощью стандартной кодовой страницы Windows ANSI (ACP). Например, вызов _mkdir(«��») при использовании кодовой страницы UTF-8 будет правильно создавать каталог с этим эмодзи в качестве имени папки, а не требовать, чтобы ACP был изменен на UTF-8 перед запуском программы. Аналогичным образом вызов _getcwd() в этой папке возвращает закодированную строку UTF-8. Для совместимости ACP по-прежнему используется, если кодовая страница языка C не имеет значения UTF-8.

Следующие аспекты среды выполнения C не могут использовать UTF-8, так как они задаются во время запуска программы и должны использовать кодовую страницу Windows ANSI по умолчанию (ACP): __argv _acmdln и _pgmptr .

Ранее эта поддержка, mbrtoc16 , , mbrtoc32 c16rtomb и c32rtomb существовали для перевода между узкими строками UTF-8, UTF-16 (такая же кодировка, как wchar_t на платформах Windows) и UTF-32. По соображениям совместимости эти API по-прежнему переводятся только в UTF-8 и не с кодовой страницы. setlocale

Чтобы использовать эту функцию в ОС до Windows 10, необходимо использовать локальное развертывание приложения или статически связать с помощью версии 1803 (10.0.17134.0) пакета SDK для Windows или более поздней версии. Для операционных систем Windows 10 до 1803 (10.0.17134.0) поддерживается только статическое связывание.

Требования

Маршрут Обязательный заголовок
setlocale
_wsetlocale или

Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

// crt_setlocale.c // // This program demonstrates the use of setlocale when // using two independent threads. // #include #include #include #include #include #define BUFF_SIZE 100 // Retrieve the date in the current // locale's format. int get_date(unsigned char* str) < __time64_t ltime; struct tm thetime; // Retrieve the current time _time64(&ltime); _gmtime64_s(&thetime, &ltime); // Format the current time structure into a string // "%#x" is the long date representation in the // current locale if (!strftime((char *)str, BUFF_SIZE, "%#x", (const struct tm *)&thetime)) < printf("strftime failed!\n"); return -1; >return 0; > // This thread sets its locale to the argument // and prints the date. uintptr_t __stdcall SecondThreadFunc( void* pArguments ) < unsigned char str[BUFF_SIZE]; char * locale = (char *)pArguments; // Set the thread locale printf("The thread locale is now set to %s.\n", setlocale(LC_ALL, locale)); // Retrieve the date string from the helper function if (get_date(str) == 0) < printf("The date in %s locale is: '%s'\n", locale, str); >_endthreadex( 0 ); return 0; > // The main thread sets the locale to English // and then spawns a second thread (above) and prints the date. int main() < HANDLE hThread; unsigned threadID; unsigned char str[BUFF_SIZE]; // Enable per-thread locale causes all subsequent locale // setting changes in this thread to only affect this thread. _configthreadlocale(_ENABLE_PER_THREAD_LOCALE); // Set the locale of the main thread to US English. printf("The thread locale is now set to %s.\n", setlocale(LC_ALL, "en-US")); // Create the second thread with a German locale. // Our thread function takes an argument of the locale to use. hThread = (HANDLE)_beginthreadex( NULL, 0, &SecondThreadFunc, "de-DE", 0, &threadID ); if (get_date(str) == 0) < // Retrieve the date string from the helper function printf("The date in en-US locale is: '%s'\n\n", str); >// Wait for the created thread to finish. WaitForSingleObject( hThread, INFINITE ); // Destroy the thread object. CloseHandle( hThread ); > 
The thread locale is now set to en-US. The time in en-US locale is: 'Wednesday, May 12, 2004' The thread locale is now set to de-DE. The time in de-DE locale is: 'Mittwoch, 12. Mai 2004' 

Функция setlocale

Функция setlocale задает локаль, которая будет использоваться текущей программой. Можно изменить все параметры локали, или конкретные её части. Эта функция также может быть использована для получения имени текущей локали, передав NULL в через параметр locale .

Локаль содержит информацию о том, как интерпретировать и выполнять определенные операции ввода/вывода и преобразования с учетом географического расположения и специфики языков в определённых условиях.

Большинство используемых сред программирования имеют определенную информацию о локали, установленной в соответствии с предпочтениями пользователя или автоматической локализации. Но, независимо от этой системной локали, в момент запуска, все Си-программы имеют установленную Cи -локаль, которая является нейтральной локалью с минимальной информацией, что позволяет предсказать результат программы. Для того чтобы использовать, по умолчанию, локаль установленную в среде программирования, необходимо вызвать функцию setlocale с параметром locale равным «» .

По умолчанию, установлена локаль: SetLocale (LC_ALL, «C») .
Вся локаль, по умолчанию, может быть установлена вызовом функции SetLocale (LC_ALL, «»);
Если необходимо изменить часть текущей локали, вместо параметра LC_ALL определяем параметр определённой категории. Какие именно категории есть, вы можете увидеть в таблице, ниже.

Чтобы изменить все параметры локали, необходимо вызвать функцию setlocale с параметром category LC_ALL , на пример, так: setlocale(LC_ALL,"");

Конкретные параметры текущей локали зависят от вызова функции setlocale , предварительно указав параметр category .

Параметры:

  • category
    Параметры локали, можно задавать отдельно каждый параметр или все сразу. В заголовочном файлеопределены константы, содержащие значения для этого параметра:
Константа Описание
LC_ALL Вся локаль.
LC_COLLATE Влияет на поведение функций strcoll и strxfrm .
LC_CTYPE Влияет на поведение всех функций заголовочного файла , кроме isdigit и isxdigit и на функции обработки многобайтовых и широких символов.
LC_MONETARY Влияет на денежный формат, денежная информация возвращается функцией localeconv .
LC_NUMERIC Влияет на символ десятичной точки в операции форматируемого ввода/вывода и на функции форматирования строк, а также на неденежную информацию возвращаемую функцией localeconv .
LC_TIME Влияет на поведение функции strftime .
  • locale
    Строка, содержащая имя локали. Как минимум существуют два значения, передаваемые через этот параметр:
Имя локали Описание
«C» Минимальная Си-локаль.
» « Локаль, по умолчанию, используемая средой разработки.

Если значение этого параметра равно NULL , функция не вносит никаких изменений в текущую локаль, но имя текущей локали возвращается функцией.

Возвращаемое значение

В случае успеха, функция возвращает указатель на строку с установленной локалью для данной категории.

Если установлена категория LC_ALL и для различных частей локали установлены различные значения, возвращаемая строка предоставляет эту информацию в формате, который может варьироваться от реализации компилятора.

Если функции не удалось установить новую локаль, текущая локаль остается неизменной и возвращается нулевой указатель.

Пример: исходный код программы

// пример использования функции setlocale #include // для оператора cout #include // для функции time и localtime #include // для функций настройки локали int main () < time_t numb_sec; // кол. сек прошедших с 00:00 , 1 января 1970 года struct tm * timeinfo; // структура хранения даты и времени char buffer [80]; struct lconv * lc; // инфрмация о форматировании числовых значений time ( &numb_sec ); // записать в numb_sec кол. сек прошедших с 00:00 , 1 января 1970 года timeinfo = localtime ( &numb_sec ); // заполняем структуру timeinfo, используя только значение количества сек. int twice = 0; // управляющая переменная циклом do while do < std::cout currency_symbol while (!twice++); // цикл сработает всего 2 раза return 0; >

Пример работы программы

Одним из возможных выводов программы при запуске этого кода является:

CppStudio.com

Локаль: C
Дата: Mon Oct 8 08:42:17 2012
Символ валюты:
Локаль: ru_UA.UTF-8
Дата: Пнд 08 Окт 2012 08:42:17
Символ валюты: гр

Локаль C

en_US.UTF-8 и ru_RU.UTF-8 мне понятны. А вот что за локаль такая C?

scanner
( 29.03.20 00:26:04 MSK ) автор топика
Ответ на: комментарий от scanner 29.03.20 00:26:04 MSK

Грубо говоря локаль «без локали», когда все функции начинают работать как в чистом C, не знающем ничего, кроме английского и ascii.

atrus ★★★★★
( 29.03.20 02:07:49 MSK )
Ответ на: комментарий от scanner 29.03.20 00:26:04 MSK

Помнится, в ней разделитель целой и дробной части — точка, а не идиотская запятая как в русской локали.

Хотя я последнее время в LO Calc для чисел юзаю армянскую локаль: там разделители тысяч – пробелы, а не запятые с апострофами.

dimgel ★★★★★
( 29.03.20 02:20:21 MSK )
Последнее исправление: dimgel 29.03.20 02:20:53 MSK (всего исправлений: 1)

Ответ на: комментарий от dimgel 29.03.20 02:20:21 MSK

На футы вместо идиотских метров уже перешёл?

anonymous
( 29.03.20 06:09:19 MSK )
Ответ на: комментарий от anonymous 29.03.20 06:09:19 MSK

Само собой. То единственное, что мне иногда приспичивает измерять, в целых метрах к сожалению не выражается.

dimgel ★★★★★
( 29.03.20 06:15:05 MSK )

C locale — это локаль, отрицающая жизнь за мкадом существование других языков и народов, кроме американского: все символы лежат в пределах 7-битного ASCII.
С появлением интернета американцы всё-таки узнали, что на этой планете живут ещё какие-то ушлёпки, которые пишут непонятные буквы, но к тому времени язык Си уже был написан, POSIX стандартизирован, и вообще поздняк метаться и негоже традиции нарушать.

Egor_ ★
( 29.03.20 10:09:26 MSK )
Ответ на: комментарий от dimgel 29.03.20 06:15:05 MSK

На футы вместо идиотских метров уже перешёл?

То единственное, что мне иногда приспичивает измерять, в целых метрах к сожалению не выражается

да ты гигант!
мой даже в футах целым числом не выражается )))

Egor_ ★
( 29.03.20 10:12:38 MSK )
Ответ на: комментарий от Egor_ 29.03.20 10:12:38 MSK
scanner
( 29.03.20 11:17:08 MSK ) автор топика
Ответ на: комментарий от dimgel 29.03.20 06:15:05 MSK

Как не выражается? 0.495 м.

LongLiveUbuntu ★★★★★
( 29.03.20 11:23:08 MSK )
Ответ на: комментарий от scanner 29.03.20 00:26:04 MSK

эт то же самое, только без UTF-8

buratino ★★★★★
( 29.03.20 11:30:12 MSK )
Ответ на: комментарий от buratino 29.03.20 11:30:12 MSK

en_US.UTF-8 и ru_RU.UTF-8 мне понятны. А вот что за локаль такая C?

эт то же самое, только без UTF-8

DllMain
( 29.03.20 11:32:40 MSK )
Ответ на: комментарий от DllMain 29.03.20 11:32:40 MSK

эт то же самое, только без UTF-8

Поддерживаю. Данная локаль распространяется только на внутренности проги, но не фс и еже (русские имена файлов? да запросто).

anonymous
( 29.03.20 11:35:31 MSK )
Ответ на: комментарий от Egor_ 29.03.20 10:09:26 MSK

beastie ★★★★★
( 29.03.20 11:56:15 MSK )
Ответ на: комментарий от beastie 29.03.20 11:56:15 MSK

В чём разница между С и C.UTF-8?

Egor_ ★
( 29.03.20 13:00:19 MSK )
Ответ на: комментарий от Egor_ 29.03.20 13:00:19 MSK

В первом случае — ASCII, во втором — Unicode.

scanner
( 29.03.20 13:30:51 MSK ) автор топика
Ответ на: комментарий от scanner 29.03.20 13:30:51 MSK

вы что-то путаете
локаль не занимается вопросами кодировки текста
локаль определяет, например, как перевести символ из строчного в прописной, как отсортировать строки по алфавиту, какой символ будет десятичной точкой (не угадаете какой — получите ошибку при переводе строки в число, лол)

кодировка — это свойство объекта, а не локали. любой объект, хранящий внутри себя текст, сам определяет, в какой кодировке он его хранит.
оффтопик — это хороший пример ОС, в которой вопросы локали и кодировки задизайнены наиболее правильно. например, локаль у ОС — русская. а кодировки — в разных местах разные: когда вы вызываете функцию открытия файла, то имя файла должно быть в 1251, когда вы выводите текст в консоль, то 866, файловая система хранит внутри себя имена файлов в UTF16, а текстовый редактор прекрасно работает с файлами в UTF32 (он видит кодировку из BOM), и всё это работает одновременно, под одной локалью!

но линуксоидам не всегда бывает очевидно, что кодировка — атрибут объекта. это всё потому, что линукс — как студент на экономном пайке: одна картошка, одна котлета, один язык программирования и одна кодировка, и не видно перспектив на лучшую жизнь. правда, благодаря перлу в линуксе всё-таки появился ЯП №2, а в последние годы и вовсе стало получше с языками, но насчёт кодировок линукс всё ещё «в танке»: кодировка должна быть одна.

запись C.UTF-8 объединяет два разных параметра (локаль и кодировку) в один. вероятно, так сделали затем, чтобы подчеркнуть зависимость второго параметра от первого (локаль определяет, из каких значений может быть выбрана кодировка)

в локали C нет никаких правил насчёт символов за пределами ASCII7, какая бы кодировка не была выбрана.

Что такое setlocale lc_all russian в С++? обьясните простым языком, пожалуйста

Функция setlocale принимает два аргумента, первый из которых макро константа, означающая, что локализация консоли должна быть полной (кодировка, форматы представления чисел, времени и дат, разделителя вещественного числа), а второй устанавливает русскую локализацию.

Скорее всего формат представления чисел вам не понравится, так что рекомендую переписать вызов со следующими параметрами:

ДимуляЗнаток (257) 3 года назад
Николай Веселуха Высший разум (350699) Пожалуйста.
Остальные ответы

setlocale — это библиотечная функция.
Она должна сообщить операционной системе как отображать (декодировать) символы
которые программа запрашивает и выводит в потоки ввода/вывода

т.. е. какую кодировку использовать в консольном окне

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *