作者tropical72 (藍影)
看板C_and_CPP
標題Re: [問題] fprintf如何靠右對齊?
時間Mon Jun 13 02:35:31 2011
※ 引述《deo2000 (800IM)》之銘言:
恕刪。
: 請問要怎麼做?
我發現已到了雞同鴨講的地步。
我於推文中已敘述,printf("%-5d", x); 使用 - 做對齊時,
「必須」要指定欄位寬度,於是才有 printf("%-8.3lf", x);
但 %-.3lf 只有指定精度,沒指定欄位寬度。
要做到你說的對齊,這裡用一個小技巧,但這應不會是唯一解法,
應會有更好的解法
#define N 5
#define BUF_SIZE 20
int i, j;
const int precision = 3;
const int width[N] = {8,8,8,9,10};
const char title[N][BUF_SIZE] = {"", "Test1", "Test2", "Test3", "Test4"};
double value[N] = {1,2,3,4,5};
// write title
for(i=0; i!=N; ++i) printf("%-*s", width[i], title[i]);
putchar('\n');
// write value
for(i=0; i!=N; ++i) printf("%-*.*lf", width[i], precision, value[i]);
----------
(1) %*.* 在 printf / fprintf 是幹嘛的請查一下。
(2) 這方式比較建議在 console 下使用,但如果是寫入 .txt 的話,
我還是比較習慣全都用 \t,你看起來會很亂是因為你用 notepad.exe 開啟,
一般我是用 excel 去開啟,看起來也比較整齊,也比較容易整理結果,
要在 notepad.exe 、 excel 看起來都很整齊的話,
printf("%*.*lf\t", width[i], precision, value[i]);
如你所見,一行的文字會愈拉愈長。
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 編輯: tropical72 來自: 180.177.73.222 (06/13 02:40)
推 qsort:%*.* 很強大 06/15 03:00
推 deo2000:原來是我把%a.b 的a當成是整數限制位數! 搞懂了謝謝 06/17 13:31