printf 格式字符串中,寬度與精度不僅可以用常數指定,還可以通過 * 佔位符,在參數列表中動態傳入。這為運行時根據變量控制輸出格式提供了極大靈活性。
%[寬度].[精度]格式字符 %*.*lf // 寬度和精度均由參數指定 %*d // 僅寬度由參數指定 %. *f // 僅精度由參數指定(注意 . 後有空格或直接 *)
* 對應**最小寬度**參數(整數)。*(在 . 後)對應**精度**參數(整數)。#includeint main() { int a, b, c; scanf("%d %d %d", &a, &b, &c); // c 為精度,a/b 為被除數/除數 printf("%.*lf\n", c, (double)a / b); return 0; }
輸入:10 3 5
輸出:3.33333(寬度默認,精度為 5 位小數)
void print_row(int width, int prec, double val) {
printf("%*.*f", width, prec, val);
}
char *s = "Hello, World!";
printf("%.*s\n", 5, s); // 輸出 "Hello"
int 類型,傳入其他類型會導致未定義行為。f/e/g 為小數位數,s 為最大字符數,d/i/o/u/x/X 為最小數字位數(不足補 0)。掌握 printf 動態寬度/精度技巧,能讓輸出格式適應運行時數據,特別適合生成對齊報表、可配置精度的科學計算輸出、動態字符串截斷等場景,是 C 語言格式化輸出的進階必備技能。