功能
c語言中產生格式化輸出的函數(定義在 stdio.h 中)。向終端輸出(顯示器等)
用法
int printf(const char *format,[argument]);
format 參數輸出的格式,定義格式為:
%[flags][width][.perc][F|N|h|l]type
規定
數據輸出方式,具體如下:
1.type 含義如下:
d 有符號10進制整數 i 有符號10進制整數 o 無符號8進制整數 u 無符號10進制整數 x 無符號的16進制數字,並以小寫abcdef表示 X 無符號的16進制數字,並以大寫ABCDEF表示 f 浮點數 E/e 用科學表示格式的浮點數 g 使用%f和%e表示中的總的位數表示最短的來表示浮點數 G 同g格式,但表示為指數 c 單個字符 s 字符串 S wchar_t字符(寬字符)類型字符串 % 顯示百分號本身 p 顯示一個指針,near指針表示為:XXXX far 指針表示為:XXXX:YYYY n 相連參量應是一個指針,其中存放已寫字符的個數
2.flags 規定輸出格式,取值和含義如下:
無 右對齊,左邊填充0和空格 - 左對齊,右邊填充空格 + 在數字前增加符號 + 或 - 0 將輸出的前面補上0,直到占滿指定列寬為止(不可以搭配使用-) 空格 輸出值為正時冠以空格,為負時冠以負號 # 當type=c,s,d,i,u時沒有影響 type=o,x,X時,分別在數值前增加'0',"0x","0X" type=e,E,f時,總是使用小數點 type=g,G時,除了數值為0外總是顯示小數點 3.width 用於控制顯示數值的寬度,取值和含義如下 n(n=1,2,3...) 寬度至少為n位,不夠以空格填充 0n(n=1,2,3...) 寬度至少為n位,不夠左邊以0填充 * 格式列表中,下一個參數還是width
4.prec 用於控制小數點后面的位數,取值和含義如下:
無 按缺省精度顯示 0 當type=d,i,o,u,x時,沒有影響 type=e,E,f時,不顯示小數點 n(n=1,2,3...) 當type=e,E,f時表示的最大小數位數 type=其他,表示顯示的最大寬度 .* 格式列表中,下一個參數還是width
F 遠指針
n 近指針
h 短整數或單精度浮點數
l 長整數或雙精度浮點數
函數返回值
printf函數的一般形式為:
int printf(const char *format,[argument]);
以上形式,我們在Visual C++里輸入“printf(”將會看到。
說明printf函數類型為整型,其返回值是整型值。
其值實際為printf控制輸出的
字符數。
例如:
int a,b;
a=printf("gelin\n"); //a的值為6,
b=printf("the value of printf is:%d",a); //b的值為24
printf("\n%d\n",b);
以上程序將會輸出:
程序舉例
例一
#define C "gelin" int main(void) { int a=12345; float b=5.12345678; char e,d,f; scanf("%c%c%c",&e,&d,&f); //分別演示:%d、%4d、%.4d、%d%*d%d printf("int is:%d\n",a); //分別演示:%d、%9d、%.9d、%8.4d、%-8.4d、%+8.4d printf("float is:%f\n",b); //分別演示:%f、%8f、%.4f、%8.4f、%-8.4f printf("char is:%s\n",C); //分別演示:%s、%8s、%.4s、%8.4s、%-8.4s return 0; }
例二
printf也可以這樣用: printf("123\n""456\n""789\n"); 輸出: 123 456 789 注意: printf("123\n" "456\n" "789\n");的輸出結果與printf("123\n");printf("456\n");printf("789\n");相同。 因此輸出多行時,也並不需要每行調用一次printf。
例三
妙用printf判斷閏年程序
#include<stdio.h> int main(void) { int a; scanf("%d",&a); printf("%s",a%(a%100?4:400)?"NO":"YES"); return 0; }
例四
#include <stdio.h> #include<string.h> int main() { char ch[20]; int m,n; strcpy(ch,"Happy!"); scanf("%d%d",&m,&n); printf("%*.*s\n",m,n,ch); return 0; } 其中前邊*定義的是總的寬度,后邊*是指定輸出字符個數。分別對應外邊參數m和n。 輸入: 10 3 輸出: Hap
printf 命令
用途
通過標准輸出設備輸出一組數據。
語法
printf Format [ Argument ... ]
格式
printf(格式控制,輸出表列),格式控制由要輸出的文字和數據格式說明組成。要輸出的的文字除了可以使用字母、數字、空格和一些數字符號意外,還可以使用一些
轉義字符表示特殊的含義。
例:printf("Hello!");
printf("%f,%f,the max is %f\n",a,b,c);
描述
printf 命令轉換、格式化並寫 Argument 參數到標准輸出。Argument 參數是由 Format 參數控制格式化的。格式化輸出行不能超出 LINE_MAX 字節長度。
下列
環境變量影響 printf 命令的執行:
LANG 在 LC_ALL 和相應的
環境變量(以 LC_ 開頭)沒有指定語言環境時,確定語言環境編目使用的語言環境。
LC_ALL 確定用於覆蓋由 LANG 或其它任何 LC_ 環境變量設置的任何語言環境編目值的語言環境。
LC_CTYPE 確定把文本字節數據順序解釋為字符的語言環境;例如,單一字節對應多字節字符的參數。
LC_MESSAGES 確定寫消息使用的語言。
LC_NUMERIC 確定數字格式編排的語言環境。此環境變量影響使用 e、E、f、g 和 G 轉換字符編寫的數字的格式。
Format 參數是包含三種對象類型的一個字符串:
* 無格式字符復制到輸出流。 * 轉換規范,每個規范導致在值參數列表中檢索 0 個或更多個項。 * 以下轉義序列。在復制到輸出流時,這些序列導致它們的相關操作在有此功能的設備上顯示: \\ 反斜杠 \a 警告 \b 退格 \f 換頁 \n 換行 \r 回車 \t 跳格 \v 垂直跳格 \ddd ddd 是 1、2 或 3 位八進制數字。這些轉義序列作為由八進制數指定的具有數字值的字節顯示
Argument 參數是一個或多個字符串的列表,它在 Format 參數的控制下被寫到標准輸出。
Format 參數在必要的情況下會經常重新使用以滿足 Argument 參數。將好像提供了
空字符串 Argument 一樣評估任何額外的 c 或者 s 轉換規范;其它額外轉換規范將好像提供了 0 Argument 一樣評估。此處 Format 參數不包含轉換規范僅出現 Argument 參數,結果是不確定的。
語法詳細介紹
每個 Format 參數中的轉換規范都具有如下順序的語法:
1. % (
百分號)。
2. 零或更多的選項,修改轉換規范的含義。選項
字符和它們的含義是:
- 轉換結果在字段中左對齊。
+ 符號轉換結果常以符號(+ 或者 -)開始。
# 此選項指定值轉換到備用格式。對於 c、d、i, u 和 s 轉換,選項沒有作用。對於 o 轉換,它增加精度來強制結果的第一數字是 a、0(零)。對於 x 和 X 轉換,非零結果分別具有 0x 或 0X 前綴。對於 e、E、 f、g 和 G 轉換,結果通常包含基數
字符,即使基數字符后沒有數字。對於 g 和 G 轉換,結尾零不象通常一樣除去。
0 對於 d、i、o、 u、x、e、 E、f、g 和 G 轉換,前導零(跟在符號或底數的后面)用於填充字段寬度,將不用空格填充。如果顯示 0(零)和 -(減號)選項,0(零)選項被忽略。對於 d、i、o、u、x 和 X 轉換,如果指定精度,0(零)選項將被忽略。
注:
其它轉換,沒有定義其行為。
3. 可選的指定最小值字段寬度的十進制數字字符串。如果轉換值
字符少於字段寬度,該字段將從左到右按指定的字段寬度填充。如果指定了左邊調整選項,字段將在右邊填充。如果轉換結果寬於字段寬度,將擴展該字段以包含轉換后的結果。不會發生截斷。然而,小的精度可能導致在右邊發生截斷。
4. 可選的精度。精度是一個 .(點)后跟十進制數字字符串。如果沒有給出精度,按 0(零)對待。精度指定:
* d、o、i、 u、x 或 X 轉換的最少數字顯示位數。
* e 和 f 轉換的基數
字符后的最少數字顯示位數。
* g 轉換的最大有效數字位數。
* s 轉換中字符串的最大打印
字節數目。
5. 指示要應用的轉換類型的一個字符,例如:
% 不進行轉換。打印一個 %(
百分號)。
d, i 接受整數值並將它轉換為有符號的十進制符號表示法。精度指定顯示的最小數字位數。如果值轉換后可以用更少的位數來表示,將使用前導零擴展。缺省精度是 1。精度為零的零值轉換的結果是
空字符串。用零作為前導
字符來指定字段寬度,導致用前導零填充字段寬度值。
o 接受整數值並將它轉換為有符號的
八進制符號表示法。精度指定顯示的最小數字位數。如果值轉換后可以用更少的位數來表示,將使用前導零擴展。缺省精度是 1。精度為零的零值轉換的結果是空字符串。用零作為前導字符來指定字段寬度,導致用前導零填充字段寬度值。不用
八進制值表示字段寬度。
u 接受整數值並將它轉換為無符號的十進制符號表示法。精度指定顯示的最小數字位數。如果值轉換后可以用更少的位數來表示,將使用前導零擴展。缺省精度是 1。精度為零的零值轉換的結果是空字符串。用零作為前導字符來指定字段寬度,導致用前導零填充字段寬度值。
x, X 接受整數值並將它轉換為十六進制符號表示法。字母 abcdef 用於 x 轉換,字母 ABCDEF 用於 X 轉換。精度指定顯示的最小數字位數。如果值轉換后可以用更少的位數來表示,將使用前導零擴展。缺省精度是 1。精度為零的零值轉換的結果是空字符串。用零作為前導字符來指定字段寬度,導致用前導零填充字段寬度值。
f 接受浮點或者雙精度值並將它轉換為十進制符號表示法,格式為 [-] ddd.ddd。基數
字符(在這里顯示為十進制點)后的數字位數等於規定的精度。 LC_NUMERIC 語言環境編目確定在這個格式中使用的基數
字符。如果不指定精度,則輸出六個數字。如果精度是 0(零),將不顯示基數
字符。
e, E 接受浮點或者雙精度值並將它轉換為指數表示的形式 [-] d.dde{+|-}dd。在基數
字符前有一個數字(在這里顯示為十進制點),基數字符后的數字位數等於規定的精度。 LC_NUMERIC 語言環境編目確定在這個格式中使用的基數字符。如果不指定精度,則輸出六個數字。如果精度是 0(零),將不顯示基數字符。E 轉換字符在指數前生成帶 E 而不是帶 e 的數字。指數通常至少包含兩個數字。然而,如果要打印的指數值大於兩個數字,必要時需要打印附加指數數字。
g、G 接受浮點和雙精度值並轉換為 f 或 e 轉換字符的樣式(或在 G 轉換的情況下是 E),用精度指定有效數字的個數。尾零將從結果中除去。基數
字符只有在其后是數字時顯示。使用的樣式取決於轉換的值。樣式 g 僅在轉換的指數結果小於 -4,或大於或等於精度時使用。
c 接受值將其作為
字符串並打印字符串中的第一個字符。
支持下列
反斜杠轉義序列:
退出狀態
該命令返回以下出口值:
0 成功完成。
>0 發生錯誤。
示例
1. 輸入下列命令:
printf ("%5d%4d\n",1213,43);
產生下列輸出:
_1213_ _43
三次使用 Format 參數打印所有給定字符串。0(零)由 printf 命令提供以滿足最后的 %4d 轉換規格。
2. 輸入下列命令
printf ("%c %c\n",78,79);
產生下列輸出:
N_O
文件
/usr/bin/printf 包含 printf 命令。