Re: [問題] fprintf如何靠右對齊?

看板C_and_CPP作者 (藍影)時間14年前 (2011/06/13 02:35), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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)

06/15 03:00, , 1F
%*.* 很強大
06/15 03:00, 1F

06/17 13:31, , 2F
原來是我把%a.b 的a當成是整數限制位數! 搞懂了謝謝
06/17 13:31, 2F
文章代碼(AID): #1DzGRsWm (C_and_CPP)
文章代碼(AID): #1DzGRsWm (C_and_CPP)