Kniga-Online.club
» » » » Linux программирование в примерах - Роббинс Арнольд

Linux программирование в примерах - Роббинс Арнольд

Читать бесплатно Linux программирование в примерах - Роббинс Арнольд. Жанр: Интернет год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

 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()

Флаг Значение =с Использовать символ с в качестве символа числового заполнения слева. Символом по умолчанию является пробел. Обычной альтернативой является 0 ^ Запретить использование символа группировки (например, запятой в Соединенных Штатах) ( Отрицательные значения заключать в скобки. Несовместим с флагом + + Обрабатывать положительные/отрицательные значения обычным образом. Использовать положительные и отрицательные знаки локали. Несовместим с флагом ( ! Не включать символ валюты. Этот флаг полезен, если вы хотите использовать strfmon() для более гибкого форматирования обычных чисел, чем это предусматривает sprintf() - Выровнять результат слева. По умолчанию используется выравнивание справа. Этот флаг не действует без указания ширины поля

Ширина поля является строкой десятичных цифр, представляющих минимальную ширину. По умолчанию использует столько символов, сколько необходимо, основываясь на оставшейся части спецификации. Значения, меньшие ширины поля, дополняются пробелами слева (или справа, если указан флаг '-').

Точность слева состоит из символа # и строки десятичных цифр. Она указывает минимальное число цифр, которые должны быть слева от десятичного символа-разделителя дробной части[141]; если преобразованное значение меньше этого, результат выравнивается символом числового заполнения. По умолчанию используется пробел, однако для его изменения можно использовать флаг =. Символы группировки не включаются в общий счет.

Наконец, точность справа состоит из символа '.' и строки десятичных цифр. Она указывает, с каким числом значащих цифр округлить значение до форматирования. По умолчанию используются поля frac_digits и int_frac_digits в struct lconv. Если это значение равно 0, десятичная точка не выводится.

strfmon() возвращает число символов, помещенных в буфер, не включая завершающий нулевой байт. Если недостаточно места, функция возвращает -1 и устанавливает errno в E2BIG.

Помимо strfmon(), POSIX (но не ISO С) предусматривает специальный флаг — символ одинарной кавычки, ' — для форматов printf() %i, %d, %u, %f, %F, %g и %G. В локалях, имеющих разделитель тысяч, этот флаг добавляет и его. Следующая простая программа, ch13-quoteflag.c, демонстрирует вывод:

/* ch13-quoteflag.c --- демонстрация флага кавычки printf */

#include &lt;stdio.h&gt;

#include &lt;locale.h&gt;

int main(void) {

 setlocale(LC_ALL, &quot;&quot;); /* Это нужно, иначе не будет работать */

 printf(&quot;%'dn&quot;, 1234567);

return 0;

}

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

$ <b>LC_ALL=C ch13-quoteflag</b> /* Обычное окружение без разделителя */

1234567

Перейти на страницу:

Роббинс Арнольд читать все книги автора по порядку

Роббинс Арнольд - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Linux программирование в примерах отзывы

Отзывы читателей о книге Linux программирование в примерах, автор: Роббинс Арнольд. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*