Печать целых чисел с разделителями тысяч в Windows с использованием C

Полагаю, вопрос довольно понятен. Я использую printf и друзей (snprintf и т.д.) для отображения некоторой статистики памяти, которая находится в диапазоне миллионов или сотен тысяч. Чтение числа в формате «1 523 556» намного проще, чем «1 523 556» для моего ленивого мышления.

Я попытался установить локаль и использовать флаг апострофа перед спецификатором формата (%'d и %'llu), но апостроф, по-видимому, является стандартом SUS, поэтому он все равно может не работать для меня под Windows.

Есть ли API для Windows для этого? Я работаю с Pelles C и программирую прямо на ANSI C99.

** РЕДАКТИРОВАТЬ **

Прочитав ответы и связанные с ними страницы MSDN, я понял, почему сейчас .NET является предпочтительным методом программирования для Windows. Это сглаживает огромный объем работы API.


person Chris D.    schedule 05.11.2010    source источник
comment
Это на самом деле не заслуживает ответа, но из часто задаваемых вопросов C: c-faq.com/stdio /commaprint.html. Я не могу найти какой-либо Windows API, который сделал бы это для вас, и вы не используете систему POSIX, которая поддерживает эти модификаторы printf.   -  person wkl    schedule 05.11.2010
comment
@birree Спасибо за комментарий. Я действительно нашел эту же страницу в C FAQ, которая напомнила об апострофе от программирования под Linux. :-) Однако в Windows не повезло.   -  person Chris D.    schedule 05.11.2010
comment
Дополнительные ответы можно найти здесь: stackoverflow.com/questions/1449805/   -  person Roland Pihlakas    schedule 23.08.2015


Ответы (2)


API Win32 предоставляет функцию, которая будет форматировать число с группировкой тысяч (или любой другой группировкой, подходящей для указанной локали): GetNumberFormat() (http://msdn.microsoft.com/en-us/library/dd318110.aspx).

К сожалению, это довольно болезненный API — далеко не такой простой, как спецификатор формата апострофа в SUS (с другой стороны, вы получаете большую гибкость в обмен на сложность).

person Michael Burr    schedule 05.11.2010
comment
Это именно то, что я искал, но не мог найти, спасибо. И действительно, большинство обычных C Windows API болезненны в использовании. Но мощный, как вы говорите. - person Chris D.; 05.11.2010

Используйте GetNumberFormatEx (для Windows Vista и позже). Параметр LOCALE_NAME_USER_DEFAULT использует настройки, установленные на панели управления в разделе региональных и языковых параметров, включая разделитель тысяч.

person robert_x44    schedule 05.11.2010
comment
Спасибо за ответ! Это правильный и прямой ответ на мой вопрос, но на моих рабочих компьютерах (всего год...) до сих пор стоит XP. Пфф. Я хотел бы принять более 1 ответа. - person Chris D.; 05.11.2010