C stdio printf() 函式
定義和用法
printf()
函式將格式化的字串寫入控制檯。
printf()
函式定義在 <stdio.h>
標頭檔案中。
注意: 更準確地說,它寫入由 stdout
指定的位置,通常是控制檯,但它也可以被配置指向檔案或其他位置。
格式說明符
格式字串可以包含格式說明符,這些說明符描述了要傳遞到函式的其他引數的表示位置和方式。
格式說明符的形式為 %[flags][width][.precision][length]specifier
。 [方括號]中的元件是可選的。
每個元件的解釋
flags
- 可選。以下任意字元的序列-
- 使輸出左對齊,透過在右側新增填充空格而不是左側。#
- 根據轉換顯示格式化資料的備用表示形式。+
- 使正數始終以 "+" 作為字首。0
- 用零填充數字的左側。
width
- 可選。一個整數,指定輸出應占用的最小字元數。如果需要,會在右側新增空格以達到此數字,如果使用了-
標誌,則會在左側新增空格。如果使用*
星號,則寬度由要表示的引數之前的引數給出。.precision
- 可選。一個.
後面跟著一個整數,指示在格式化資料中顯示多少個小數位數。length
- 可選。一個字元序列,它改變引數的預期資料型別。它可以是以下之一hh
- 對於整數,期望char
型別。h
- 對於整數,期望short int
型別。l
- 對於整數,期望long int
型別。
對於字元,期望wint_t
型別。
對於字串,期望wchar_t*
型別。ll
- 對於整數,期望long long int
型別。j
- 對於整數,期望intmax_t
或uintmax_t
型別。z
- 對於整數,期望size_t
型別。t
- 對於整數,期望ptrdiff_t
型別。L
- 對於浮點數,期望long double
型別。
specifier
- 必需。一個字元,指示引數的資料應如何表示。可能的字元列表顯示在下表中。
說明符列表
字元 | 說明符 | 描述 |
---|---|---|
d 或 i |
十進位制整數 | 將整數表示為十進位制整數。 |
u |
無符號十進位制整數 | 將一個整數表示為無符號十進位制整數。 |
o |
八進位制整數 | 將整數表示為八進位制整數。 "#" 標誌將用 "0" 作為字首。 |
x 或 X |
十六進位制整數 | 將整數表示為十六進位制整數。 "#" 標誌將用 "0x" 作為字首。如果使用 "X",則數字 A 到 F 以及字母 X 將以大寫形式顯示。 |
f 或 F |
浮點數 | 表示浮點數。如果使用 "F",則字母(如 "nan" 的值)將以大寫形式表示。 "#" 標誌將強制顯示小數點,即使沒有小數位。 |
e 或 E |
科學計數法 | 用科學計數法表示浮點數。如果使用 "E",則字母將以大寫形式表示。 "#" 標誌將強制顯示小數點,即使沒有小數位。 |
g 或 G |
通用數字 | 對浮點數使用 f 和 e 之間的最短表示形式。如果使用 "G",則它在 F 和 E 之間選擇。 |
a 或 A |
十六進位制浮點數 | 顯示浮點數的內部表示,帶有十六進位制數字。如果使用 "A",則數字將以大寫形式表示。 |
c |
字元 | 表示一個字元。如果引數是整數,則表示整數指定的 ASCII 值的字元。 |
s |
字串 | 表示一個字串。 |
p |
指標 | 表示指標的記憶體地址,通常用十六進位制數字表示。 |
n |
無輸出 | 到目前為止已列印的字元數將被寫入引數。引數必須是指向整數的指標。 |
% |
百分號 | 表示一個字面量 "%" 字元。 |
語法
printf(const char * format, arg1, arg2...);
引數值
引數 | 描述 |
---|---|
format | 必需。一個字串,表示要寫入檔案的資料的格式。 |
arg1, arg2... | 可選。任何數量的其他引數,它們的值可以使用格式引數中的說明符進行格式化並列印到控制檯。 |
技術詳情
返回 | 一個 int 值,表示列印的字元數。如果發生錯誤,則返回負數。 |
---|
更多示例
示例
表示各種型別的整數
char var1 = 102;
short int var2 = 2024;
int var3 = 95;
long int var4 = 212;
long long int var5 = 1200L;
printf("%hhd %hd %d %ld %lld", var1, var2, var3, var4, var5);
自己動手試一試 »
示例
以多種方式表示整數
int value = 1024;
printf( "%d \n", value); // 整數
printf( "%o \n", value); // 八進位制
printf( "%x \n", value); // 十六進位制
printf("%#o \n", value); // 帶 "0" 字首的八進位制
printf("%#X \n", value); // 帶 "0X" 字首的大寫十六進位制
自己動手試一試 »
示例
以多種方式表示浮點數
float myFloat = 19.99;
printf("%f \n", myFloat); // 浮點數
printf("%e \n", myFloat); // 科學計數法
printf("%g \n", myFloat); // 最佳
printf("%.2f \n", myFloat); // 2 位小數
printf("%8.2f \n", myFloat); // 8 個字元寬,2 位小數
printf("%08.2f \n", myFloat); // 零填充,8 個字元寬,2 位小數
自己動手試一試 »
示例
使用 %n
說明符測量字串長度
// 為字串預留 20 位元組記憶體
char myString[20] = "Hello World!\0";
int memorySize = sizeof(myString);
int stringSize;
// 列印字串並使用 %n 進行測量
printf("%s%n\n", myString, &stringSize);
// 列印字串的大小
printf("Memory size: %d\n", memorySize);
printf("String size: %d\n", stringSize);
自己動手試一試 »