首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言 printf 寬度與精度動態控制技巧

     編輯:關於C語言

C 語言 printf 寬度與精度動態控制技巧

printf 格式字符串中,寬度與精度不僅可以用常數指定,還可以通過 * 佔位符,在參數列表中動態傳入。這為運行時根據變量控制輸出格式提供了極大靈活性。

語法規則

%[寬度].[精度]格式字符
%*.*lf   // 寬度和精度均由參數指定
%*d      // 僅寬度由參數指定
%. *f    // 僅精度由參數指定(注意 . 後有空格或直接 *)
  • 第一個 * 對應**最小寬度**參數(整數)。
  • 第二個 *(在 . 後)對應**精度**參數(整數)。
  • 參數順序:先寬度,後精度,最後數值。

實例演示

#include 

int 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)。
  • 若精度參數為負數,行為未定義(通常視為 0)。

總結

掌握 printf 動態寬度/精度技巧,能讓輸出格式適應運行時數據,特別適合生成對齊報表、可配置精度的科學計算輸出、動態字符串截斷等場景,是 C 語言格式化輸出的進階必備技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved