Добавить в цитаты Настройки чтения

Страница 194 из 253

 fputs(buf, stdout);

 return 0;

}

При запуске в двух различных локалях она выдает такой результат:

$ <b>LC_ALL=en_US ch13-strfmon</b> /* В Соединенных Штатах */

You owe me $1,234.57 (USD 1,234.57)

$ <b>LC_ALL=it_IT ch13-strfmon</b> /* В Италии */

You owe me EUR 1.235 (EUR 1.235)

Как вы можете видеть, strfmon() подобна strftime(), копируя обычные символы в буфер назначения без изменений и форматируя аргументы в соответствии со своими собственными спецификациями форматирования. Их всего три.

%n  Вывести национальное (т.е. местное) представление значения валюты.

%i  Вывести международное представление значения валюты.

%%  Вывести символ '%'.

Форматируемые значения должны иметь тип double. Разницу между %n и %i мы видим в локали "en_US": %n использует символ $, тогда как %i использует USD, которая означает «доллары США».

Гибкость — и соответственно определенная сложность — сопровождают многие функции API, разработанные для POSIX, и strfmon() не является исключением. Как и с printf(), несколько необязательных элементов, которые могут быть между % и i или n, обеспечивают повышенный контроль. Полные формы следующие:

%[<i>флаги</i>][<i>ширина поля</i>][#<i>точность_слева</i>][.<i>точность_справа</i>]i

%[<i>флаги</i>][<i>ширина поля</i>][#<i>точность_слева</i>][.<i>точность_справа</i>]n

%% /* Не допускаются поля флагов, ширины и т.д. */

Флаги перечислены в табл. 13.2.

Таблица 13.2. Флаги для strfmon()