0

私はこの印刷ステートメントを使用しています:

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

コンマを取得する方法を知っている人はいますか???

4

2 に答える 2

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, "")呼び出しは、環境変数に従って現在のロケールを設定します。桁区切り記号はロケール固有です。

于 2012-10-27T01:11:23.740 に答える
0

さらにじっと見つめた後、私は理解しました。これを試して:

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

localeこれにより、Cが C のデフォルトから C 数値に切り替わります。

于 2012-10-27T01:09:45.953 に答える