如何让printf分组工作

时间:2012-10-27 01:02:25

标签: c linux locale printf

我正在使用此打印声明:

printf(
 "%5.2lf %'15llu %'13llu %5.2lf %'15llu "
 "%'11u %'11u %'11u %'11u %'11u %'11u %'11u %'11u %'11u %'11u "
 "%'11u %'9u %'11u %'9u\n",
 (p->cbDecomp) ? 100.0 * ((double)p->cbComp)/p->cbDecomp : 0, p->cbDecomp, p->cbComp, 
 (p->cbDecompDup) ? 100.0 * ((double)p->cbComp)/p->cbDecompDup : 0, p->cbDecompDup, 
 p->cbIndFile, p->cbUdhFile, p->cUid, p->cFreeUid, p->cDups, cbUid, cbUdh, p->cTbl, p->cTblDel, cbTbl,
 p->cTblBuckets, p->cMaxTblInBucket, p->cUdhBuckets, p->cMaxUdhInBucket);

但得到这个输出:

  atp 001  0.39      1094017024       4281732  0.39      1110155264     9111191     7510837      267094           0        3940     1335470     3205128      352190           0     3521900      131072        13      131072        11
  atp 002  0.33        40898560        133896  0.33        40935424      355600      253716        9985           0           9       49925      119820       15297           0      152970        4096        13        4096         9
  atp 003  0.38       690307072       2640414  0.38       694116352     5763359     4680853      168532           0         930      842660     2022384      237391           0     2373910       65536        15       65536        11
  atp 004  0.70       661450752       4613727  0.69       667181056     5614000     6574177      161487           0        1399      807435     1937844      277030           0     2770300       16384        33        8192        42

分开数千组的逗号没有出现!我认为这与语言环境有关,但我对语言环境一无所知。

[c698174@shldvgfas023] $ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

[c698174@shldvgfas023] $ cat /proc/version 
Linux version 2.6.32-236.el6.sf599499.x86_64 (mockbuild@x86-012.build.bos.redhat.com) (gcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) ) #1 SMP Thu May 10 12:52:20 EDT 2012

有谁知道怎么弄我的逗号???

2 个答案:

答案 0 :(得分:2)

首先设置您的区域设置。

#include <stdio.h>
#include <locale.h>
int main(int argc, char *argv[])
{
    printf("%'d\n", 1000000);
    setlocale(LC_ALL, "");
    printf("%'d\n", 1000000);
    return 0;
}

输出:

$ ./a.out 
1000000
1,000,000

setlocale(LC_ALL, "")调用将根据环境变量设置当前语言环境。千位分隔符是特定于语言环境的。

答案 1 :(得分:0)

经过更多的凝视,我明白了。试试这个:

setlocale(LC_NUMERIC, "en_US.iso88591");
printf("%'15d\n", i);

这会将C locale从C默认切换为C数字。