printf函數格式化輸出攻略

目錄

一、基本用法

二、占位符

基本用法

常用占位符

字符串占位符示例

多占位符示例

注意事項

三、占位符列表

基本數據類型占位符

浮點數占位符

特殊類型占位符

長度修飾符

使用示例

注意事項

四、輸出格式

1、限定寬度

基本用法

左對齊輸出

浮點數寬度限制

2、強制顯示正負號

3、控制小數精度

基本精度控制

結合寬度限制

動態參數指定

4、截斷字符串輸出

基本用法

特點

結合寬度限定


一、基本用法

????????printf() 函數用于將參數文本輸出到屏幕。函數名中的"f"代表"format"(格式化),表示該函數可以定制輸出文本的格式。

基本語法示例:

#include <stdio.h>
int main() 
{printf("Hello World");return 0;
}

上述代碼會在屏幕上輸出一行文字"Hello World"。

注意事項:

  1. printf() 不會自動在行尾添加換行符。運行結束后,光標會停留在輸出結束的位置,不會自動換行。

  2. 如需換行,可以在輸出文本的結尾添加換行符\n:

    #include <stdio.h>
    int main() 
    {printf("Hello World\n");return 0;
    }
  3. 若需要在文本內部換行,同樣可以通過插入換行符實現:

    #include <stdio.h>
    int main() 
    {printf("Hello\nWorld\n");/* 等價于 */printf("Hello\n");printf("World\n");return 0;
    }

重要說明:

  • printf() 函數定義在標準庫頭文件stdio.h中

  • 使用該函數前,必須在源文件頭部引入此頭文件


二、占位符

printf()?函數支持在輸出文本中使用占位符,這些占位符可以在運行時被具體的值替換。

基本用法

#include <stdio.h>
int main()
{printf("There are %d apples\n", 3);return 0;
}

說明:

  • There are %d apples\n?是輸出文本,其中?%d?是占位符。

  • 占位符以百分號?%?開頭,后跟一個類型標識符(如?d?表示整數)。

  • printf()?的第二個參數?3?會替換?%d,最終輸出:There are 3 apples

常用占位符

占位符類型示例
%d整數printf("%d", 10)
%s字符串printf("%s", "abc")
%f浮點數printf("%f", 3.14)
%c單個字符printf("%c", 'A')

字符串占位符示例

#include <stdio.h>
int main()
{printf("%s will come tonight\n", "zhangsan");return 0;
}

輸出:zhangsan will come tonight

多占位符示例

#include <stdio.h>
int main()
{printf("%s says it is %d o'clock\n", "lisi", 21);return 0;
}

說明:

  • 第一個?%s?被?"lisi"?替換

  • 第二個?%d?被?21?替換
    輸出:lisi says it is 21 o'clock

注意事項

  1. 參數匹配規則

    • 占位符數量必須與后續參數數量嚴格匹配

    • 如果有?n?個占位符,printf()?需要?n + 1?個參數(包括格式字符串本身)。

  2. 錯誤示例:此類錯誤可能導致未定義行為(輸出亂碼或程序崩潰)。

    printf("%d %s", 10);  // 錯誤:缺少第二個參數

三、占位符列表

printf()?提供多種占位符,對應不同的 C 語言數據類型。以下是常用占位符的完整參考:

基本數據類型占位符

占位符類型說明示例
%dint十進制整數printf("%d", 10)
%iint%dprintf("%i", 10)
%uunsigned int無符號十進制整數printf("%u", 10U)
%oint八進制整數printf("%o", 10)
%xint十六進制整數(小寫)printf("%x", 255)?→?ff
%Xint十六進制整數(大寫)printf("%X", 255)?→?FF

浮點數占位符

占位符類型說明
%ffloat/double十進制浮點數
%efloat/double科學計數法(小寫e)
%Efloat/double科學計數法(大寫E)
%gfloat/double自動選擇%f%e(更簡潔)
%Gfloat/double自動選擇%f%E
%afloat/double十六進制浮點數(小寫)
%Afloat/double十六進制浮點數(大寫)

特殊類型占位符

占位符類型說明
%cchar單個字符
%schar*字符串
%pvoid*指針地址
%nint*不打印,存儲已輸出的字符數
%%-輸出百分號字符

長度修飾符

可與基本占位符組合使用:

  • hshort(如%hd

  • llong(如%ld

  • lllong long(如%lld

  • Llong double(如%Lf

  • zsize_t(如%zd

使用示例

#include <stdio.h>int main() 
{// 基本整數printf("Decimal: %d\n", 255);        // 255printf("Octal: %o\n", 255);          // 377printf("Hex: %x\n", 255);            // ff// 浮點數printf("Float: %f\n", 3.14159);      // 3.141590printf("Scientific: %e\n", 3.14159); // 3.141590e+00// 特殊類型printf("Character: %c\n", 'A');      // Aprintf("String: %s\n", "Hello");     // Helloprintf("Pointer: %p\n", main);       return 0;
}

注意事項

  1. 類型必須嚴格匹配占位符

  2. 使用%n時要格外小心(可能引發安全問題)

  3. %%用于輸出百分號字符本身


四、輸出格式

printf() 可以定制占位符的輸出格式。

1、限定寬度

printf()?函數允許通過格式說明符限定輸出的最小寬度。具體用法如下:

基本用法

在占位符中指定最小寬度,當輸出內容不足該寬度時,默認會在左側填充空格(右對齊)。

示例:

#include <stdio.h>
int main() 
{printf("%5d\n", 123);  // 輸出為 "  123"(前面有2個空格)return 0;
}

說明:

  • %5d?表示該整數的輸出寬度至少為5個字符

  • 由于"123"只有3位,不足部分會在前面補2個空格

左對齊輸出

在寬度指示符前添加-號可以改為左對齊(右側補空格)。

示例:

#include <stdio.h>
int main() 
{printf("%-5d\n", 123);  // 輸出為 "123  "(后面有2個空格)return 0;
}

浮點數寬度限制

對于浮點數,寬度限制會作用于整個數字(包括整數部分、小數點和小數部分)。

示例:

#include <stdio.h>
int main() 
{printf("%12f\n", 123.45);  // 輸出為 "  123.450000"return 0;
}

說明:

  • %12f?表示浮點數至少占用12個字符寬度

  • 默認情況下,printf()會輸出6位小數,因此實際輸出為"123.450000"(共10個字符)

  • 不足12位,所以在前面補2個空格

注意:當實際數值的寬度超過指定的最小寬度時,會按照實際寬度輸出,不會截斷數據。

2、強制顯示正負號

????????默認情況下,printf()?僅在輸出負數時顯示?-?號。若需強制顯示正數的?+?號,可在占位符的?%?后添加?+?標志。

示例:

#include <stdio.h>
int main() 
{printf("%+d\n", 12);   // 輸出 "+12"printf("%+d\n", -12);  // 輸出 "-12"return 0;
}

說明:

  • %+d?格式確保數值始終帶有符號標識

  • 適用于需要明確區分正負值的場景

3、控制小數精度

基本精度控制

通過?%.nf?格式可指定小數位數(n 為要保留的位數):

#include <stdio.h>
int main() 
{printf("Number is %.2f\n", 0.5);  // 輸出 "Number is 0.50"return 0;
}

注意:

  • 會自動進行四舍五入

  • 不足位數補零(如?%.3f?輸出 "0.500")

結合寬度限制

可同時指定寬度和精度(格式:%寬度.精度f):

#include <stdio.h>
int main() 
{printf("%6.2f\n", 0.5);  // 輸出 "  0.50"(頭部2空格)return 0;
}

說明:

  • %6.2f?表示總寬度6字符,含2位小數

  • 默認右對齊,不足寬度左側補空格

動態參數指定

使用?*?占位符可通過參數動態設置寬度和精度:

#include <stdio.h>
int main() 
{printf("%*.*f\n", 6, 2, 0.5);  // 等效于 printf("%6.2f\n", 0.5)return 0;
}

特點:

  • 第一個?*?對應寬度參數(示例中的6)

  • 第二個?*?對應精度參數(示例中的2)

  • 提高代碼靈活性,適合需要運行時確定格式的場景

4、截斷字符串輸出

? ? printf()?函數可以通過?%.ns?格式說明符來控制字符串的輸出長度,其中?n?指定要顯示的最大字符數。

基本用法

#include <stdio.h>
int main() 
{printf("%.5s\n", "hello world");  // 輸出 "hello"return 0;
}

說明:

  • %.5s?表示只輸出字符串的前5個字符

  • 原字符串 "hello world" 被截斷為 "hello"

  • 不會修改原字符串,僅控制輸出內容

特點

  1. 安全截斷:不會導致緩沖區溢出

  2. 精確控制:可指定任意截取長度(不超過字符串實際長度)

  3. 格式靈活:可與最小寬度結合使用(如?%10.5s

結合寬度限定

#include <stdio.h>
int main() 
{printf("%10.5s\n", "hello world");  // 輸出 "     hello"(右對齊)printf("%-10.5s\n", "hello world"); // 輸出 "hello     "(左對齊)return 0;
}

注意:

  • 當截取長度超過字符串實際長度時,按實際字符串長度輸出

  • 常用于格式化表格輸出或固定長度顯示場景

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918281.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918281.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918281.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI小智單片機esps32-s3燒錄教程

1. 下載代碼到本地 代碼地址&#xff1a;https://github.com/78/xiaozhi-esp32 2. vscode安裝環境 安裝一下這個插件 3. esp32-s3通過數據線連接電腦 【圖片】 4. vscode選擇對應配置 如果是用自己的服務還得改下地址 5. 點擊構建 6. 點擊燒錄

socket編程中系統調用send()詳細講解

在 socket 編程中&#xff0c;send() 是用于在已連接的套接字上發送數據的系統調用&#xff0c;主要用于 TCP 協議&#xff08;也可用于 UDP&#xff0c;但需配合連接操作&#xff09;。它負責將用戶態的數據傳遞到內核緩沖區&#xff0c;再由內核協議棧&#xff08;如 TCP/IP&…

Eclipse JSP/Servlet:深入解析與最佳實踐

Eclipse JSP/Servlet:深入解析與最佳實踐 引言 Eclipse JSP/Servlet 是 Java 企業版(Java EE)的核心技術之一,它為 Web 開發者提供了一個強大的平臺來構建動態和交互式的 Web 應用程序。本文將深入探討 Eclipse JSP/Servlet 的概念、工作原理以及最佳實踐,幫助開發者更好…

CNB私有化部署Dify(零成本)教程

本篇文章介紹一下如何進行dify的私有化部署的過程&#xff1a;dify定位是開源的LLM應用平臺&#xff0c;搭建自己的這個AI應用&#xff0c;而我們非常熟悉的這個coze實際上是通過搭積木一樣搭建AI應用&#xff0c;我選擇從dify開始進行了解學習 1.前置準備 我們需要有這個騰訊云…

imx6ull-驅動開發篇16——信號量與互斥體

目錄 前言 信號量 概念與特性 信號量 API 函數 互斥體 概念與特性 互斥體 API 函數 前言 Linux 內核提供的幾種并發和競爭的處理方法&#xff0c;我們學習了&#xff1a; 驅動開發篇14——原子操作 驅動開發篇15——linux自旋鎖 本講我們就繼續學習&#xff1a;信號…

Bug 記錄:SecureRandom.getInstanceStrong()導致驗證碼獲取阻塞

問題描述&#xff1a; 在發送驗證碼到郵件中&#xff0c;接口調用時卡在生成驗證碼階段&#xff0c;導致驗證碼功能完全不可用&#xff1b; 經排查開發環境一切正常&#xff0c;測試環境會重現此問題&#xff1b;問題分析&#xff1a; 現象&#xff1a; 代碼卡在 SecureRandom.…

商派小程序商城(小程序/官網/APP···)的范式躍遷與增長再想象

2025年&#xff0c;品牌官方商城應該如何定義&#xff1f;—— 還是一套“電商貨架”&#xff1f;在商派看來&#xff0c;現如今“品牌官方商城”則需要重新定義&#xff0c;結合不同品牌企業的業務發展需求&#xff0c;也就有著更多豐富的定義和組合想象——如&#xff0c;商城…

基于串口實現可擴展的硬件函數 RPC 框架(附完整 Verilog 源碼)

本文介紹如何使用簡單的串口協議搭建一個支持寄存器讀寫與硬件函數調用的通用交互框架&#xff0c;適用于 FPGA 調試、嵌入式接口、中小型控制系統等場合。 特性&#xff1a; 輕量協議、30 個32位寄存器、函數調用、狀態反饋&#xff0c;源碼清晰易擴展。&#x1f4a1; 背景與目…

jenkins-飛書通知機制

一. 目標&#xff1a; 觸發構建和結束后&#xff0c;自動觸發到飛書工作群&#xff0c;發布同學只需要關注消息即可&#xff0c;而無需人工盯梢。 二. 實現方式&#xff1a; 1. 機器人配置&#xff1a; 創建一個群&#xff0c; 配置機器人&#xff1a; 保管好下面的webhoo…

GoLand 項目從 0 到 1:第五天 —— 角色權限中間件實現與事務控制

第五天核心任務:權限校驗鏈路閉環 第五天的開發聚焦于權限控制的核心實現,完成了角色權限中間件的開發,實現了接口級別的權限校驗,并基于事務控制確保用戶權限操作的數據一致性。通過這部分工作,系統的權限管理從設計階段正式進入可運行階段,為后續業務模塊的安全接入提…

【工具變量】地級市固定資產投資數據(2000-2023年)

數據簡介&#xff1a;地級市固定資產投資是衡量地方經濟發展活力與動能的重要指標&#xff0c;其規模、結構及增速不僅反映區域產業布局和政策導向&#xff0c;也直接影響基礎設施完善、產業升級和民生改善。清晰展現長期經濟發展脈絡&#xff0c;助力捕捉經濟增長與波動規律。…

Kotlin初體驗

前言&#xff1a; 在當今的軟件開發領域&#xff0c;隨著技術的不斷發展&#xff0c;開發者總是在尋找更高效、更簡潔的編程語言來提升開發效率并減少代碼中的潛在問題。而 Kotlin&#xff0c;作為一門現代的編程語言&#xff0c;逐漸贏得了越來越多開發者的青睞&#xff0c;尤…

五十五、【Linux系統nginx服務】nginx安裝、用戶認證、https實現

一、Nginx 核心功能全景圖 #mermaid-svg-j5M1WUQFrtyrWjAD {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-j5M1WUQFrtyrWjAD .error-icon{fill:#552222;}#mermaid-svg-j5M1WUQFrtyrWjAD .error-text{fill:#552222;s…

AtCoder Beginner Contest 418

文章目錄A Im a teapotB Youre a teapotC FlushD XNOR OperationE TrapeziumF Were teapotsG Binary OperationAtCoder Beginner Contest 418A I’m a teapot Takahashi is a teapot. Since he is a teapot, he will gladly accept tea, but will refuse any other liquid. Det…

多級緩存詳解

多級緩存 傳統緩存&#xff1a; 傳統緩存策略一般是請求到達Tomcat后&#xff0c;先查詢Redis&#xff0c;如果未命中則查詢數據庫。 這種模式下請求一定要經過Tomcat處理&#xff0c;Tomcat的性能就成為了整個系統的瓶頸&#xff1b;并且Redis的緩存也有過期時間&#xff0c;一…

接口自動化-JSON Schema

目錄 1.介紹 2.安裝 3.使用 3.1type關鍵字 3.2最大值最小值 3.2.1minimum 、 maximum 3.2.2 exclusiveMinimum 、exclusiveMaximum 3.3字符串特殊校驗 3.4數據約束 3.5對象約束 3.6必須屬性 3.7依賴關系 4.總結 1.介紹 JSON Schema 是一個用來定義和校驗 JSON 的…

前端技術架構設計文檔(Vue2+Antd+Sass)

前端技術架構設計文檔&#xff08;Vue2AntdSass&#xff09; 文檔信息項目名稱前端系統&#xff08;基于 Vue2 技術棧&#xff09;技術棧核心Vue2 Ant Design Vue Sass版本號V1.0.0技術棧核心Vue2 Ant Design Vue Sass編制日期2025-08-071. 技術棧選型 1.1 核心技術框架類別…

【設計模式】抽象工廠模式 (工具(Kit)模式)

抽象工廠模式&#xff08;Abstract Factory Pattern&#xff09;詳解一、抽象工廠模式簡介 抽象工廠模式&#xff08;Abstract Factory Pattern&#xff09; 是一種 創建型設計模式&#xff08;對象創建型模式&#xff09;&#xff0c;它提供了一種創建一系列相關或相互依賴對象…

Android初學者系統開發學習路線參考

Android初學者系統開發學習路線參考 文章目錄Android初學者系統開發學習路線參考一、前言二、Android初學的學習計劃第一階段&#xff08;一個月&#xff09;UI相關學習&#xff1a;開發環境與 UI 基礎&#xff0c;第一周&#xff1a;UI 控件與布局進階&#xff0c;第二周&…

擴散LLM推理新范式:打破生成長度限制,實現動態自適應調節

隨著 Gemini-Diffusion&#xff0c;Seed-Diffusion 等擴散大語言模型&#xff08;DLLM&#xff09;的發布&#xff0c;這一領域成為了工業界和學術界的熱門方向。但是&#xff0c;當前 DLLM 存在著在推理時必須采用預設固定長度的限制&#xff0c;對于不同任務都需要專門調整才…