printf

printf

printf命令的作用是格式化輸出函式,一般用於向標準輸出設備按規定格式輸出信息。printf()函式的調用格式為:printf("<格式化字元串>", <參量表>)。printf()是C語言標準庫函式,在 stdio.h 中定義。輸出的字元串除了可以使用字母、數字、空格和一些數字元號以外,還可以使用一些轉義字元表示特殊的含義。

基本介紹

  • 中文名:格式化輸出
  • 外文名:printf
  • 外語縮寫:printf(函式名)
  • 頭檔案:stdio.h
  • 套用:C語言標準庫函式
  • 功能:格式化輸出函式
printf函式定義,函式聲明,調用格式,格式控制字元串format,功能,用法詳解,類型type,標誌flags,輸出最小寬度width,精度.prec,類型長度length,轉義序列,套用示例,

printf函式定義

函式聲明

int printf(char *format...);

調用格式

printf("<格式化字元串>", <參量表>);
格式化字元串包含三種對象,分別為:
(1)字元串常量;
(2)格式控制字元串;
(3)轉義字元。
字元串常量原樣輸出,在顯示中起提示作用。輸出表列中給出了各個輸出項,要求格式控制字元串和各輸出項在數量和類型上應該一一對應。其中格式控制字元串是以%開頭的字元串,在%後面跟有各種格式控制符,以說明輸出數據的類型、寬度、精度等。

格式控制字元串format

format-- 是字元串,包含了要被寫入到標準輸出 stdout 的文本。它可以包含嵌入的 format 標籤,format 標籤可被隨後的附加參數中指定的值替換,並按需求進行格式化。
printf的格式控制字元串format組成如下:
%[flags][width][.prec][length]type
即:%[標誌][最小寬度][.精度][類型長度]類型
詳解見下文。

功能

在c語言中產生格式化輸出的函式(定義在 stdio.h 中),其向未重定向終端(顯示器、控制台等)輸出字元。
printf

用法詳解

//以下程式用於獲得輸入值i,j並將其輸出(i,j之間以逗號隔開)#include<stdio.h>int main(){    int i, j;    scanf("%d %d", &i, &j);    printf("i=%d;j=%d", i, j);    return 0;}
//以下程式用於輸出“中文百科”#include<stdio.h>int main(){    printf("中文百科");    return 0;}
通常意義上format的格式如下:
%[flags][width][.prec][length]type
規定輸出數據的格式,具體如下:

類型type

type的字元用於規定輸出數據的類型,含義如下:
字元
對應數據類型
含義
d / i
int
接受整數值並將它表示為有符號的十進制整數,i是老式寫法
o
unsigned int
無符號8進制整數(不輸出前綴0)
u
unsigned int
無符號10進制整數
x / X
unsigned int
無符號16進制整數,x對應的是abcdef,X對應的是ABCDEF(不輸出前綴0x)
f(lf)
double
單精度浮點數雙精度浮點數用f(lf 在C99開始加入標準,意思和 f 相同)
e / E
double
科學計數法表示的數,此處"e"的大小寫代表在輸出時用的“e”的大小寫
g / G
double
有效位數,如:%.8g表示單精度浮點數保留8位有效數字。
c
char
字元型。可以把輸入的數字按照ASCII碼相應轉換為對應的字元
s / S
char * / wchar_t *
字元串。輸出字元串中的字元直至字元串中的空字元(字元串以'\0‘結尾,這個'\0'即空字元)
p
void *
以16進制形式輸出指針
n
int *
到此字元之前為止,一共輸出的字元個數,不輸出文本
%
無輸入
不進行轉換,輸出字元‘%’(百分號)本身
m
列印errno值對應的出錯內容,(例: printf("%m\n"); )
註:%g、%G在小數點位數四位或指數大於等於精度時用%e、%E,否則用%f。

標誌flags

flags 規定輸出樣式,取值和含義如下:
字元
字元名稱
說明
-
減號
左對齊,右邊填充空格(默認右對齊)
+
加號
在數字前增加符號 + 或 -
0
數字零
將輸出的前面補上0,直到占滿指定列寬為止(不可以搭配使用“-”)
空格
輸出值為正時加上空格,為負時加上負號
#
井號
type是o、x、X時,增加前綴0、0x、0X
type是e、E、f、g、G時,一定使用小數點
type是g、G時,尾部的0保留
示例:
printf("%5d\n",1000);               //默認右對齊,左邊補空格printf("%-5d\n",1000);              //左對齊,右邊補空格printf("%+d %+d\n",1000,-1000);     //輸出正負號printf("% d % d\n",1000,-1000);     //正號用空格替代,負號輸出printf("%x %#x\n",1000,1000);       //輸出0xprintf("%.0f %#.0f\n",1000.0,1000.0)//當小數點後不輸出值時依然輸出小數點printf("%g %#g\n",1000.0,1000.0);   //保留小數點後後的0printf("%05d\n",1000);              //前面補0

輸出最小寬度width

用於控制顯示數值的寬度,取值和含義如下:
n(n=1,2,3,4,5,6...): 寬度至少為n位,不夠以空格填充。
* 格式列表中,下一個參數還是width
width是一個可選的指定最小值欄位寬度的十進制數字字元串。如果轉換值字元少於欄位寬度,該欄位將從左到右按指定的欄位寬度填充。如果指定了左邊調整選項,欄位將在右邊填充。如果轉換結果寬於欄位寬度,將擴展該欄位以包含轉換後的結果。不會發生截斷。然而,小的精度可能導致在右邊發生截斷。

精度.prec

用於控制小數點後面的位數,取值和含義如下:
無按預設精度顯示0
當type=d,i,o,u,x時,沒有影響;
type=e,E,f時,不顯示小數點
n(n=1,2,3...)
當type=e,E,f時表示的最大小數位數;
type=其他,表示顯示的最大寬度
prec是指可選的精度。精度是一個 .(點)後跟十進制數字字元串。如果沒有給出精度,按 0(零)對待。精度指定:
* d、o、i、 u、x 或 X 轉換的最少數字顯示位數。
* e 和 f 轉換的基數字元後的最少數字顯示位數。
* g 轉換的最大有效數字位數。
* s 轉換中字元串的最大列印位元組數目。

類型長度length

類型長度指明待輸出數據的長度。因為相同類型可以有不同的長度,比如整型有16bits的short int,32bits的int,也有64bits的long int,浮點型有32bits的單精度float和64bits的雙精度double。為了指明同一類型的不同長度,類型長度(length)應運而生,成為格式控制字元串的一部分。
length描述
h
參數被解釋為短整型或無符號短整型(僅適用於整數說明符:i、d、o、u、x 和 X)。
l
參數被解釋為長整型或無符號長整型,適用於整數說明符(i、d、o、u、x 和 X)及說明符 c(表示一個寬字元)和 s(表示寬字元字元串)。
L
參數被解釋為長雙精度型(僅適用於浮點數說明符:e、E、f、g 和 G)。
根據不同的 format 字元串,函式可能需要一系列的附加參數,每個參數包含了一個要被插入的值,替換了 format 參數中指定的每個 % 標籤。參數的個數應與 % 標籤的個數相同。

轉義序列

這些轉義序列在字元串中會被自動轉換為相應操作命令。printf()使用的常見轉義字元如下:
符號
意義
符號
意義
\a
鈴聲(提醒)
\b
Backspace
\f
換頁
\n
換行
\r
回車
\t
水平制表符
\v
垂直制表符
\’
單引號
\”
雙引號
\\
反斜槓
\?
文本問號
\ ooo (例如\024)
ASCII字元(OCX)
\xhh (例如:\x20)
ASCII字元(HEX)
\xhhhh
寬字元(2位元組HEX)
例如,WCHAR f = L'\x4e00' 或 WCHAR b[] = L"The Chinese character for one is \x4e00"。
函式返回值
printf 函式的一般形式為:
int printf(const char *format, [argument]);
其值為printf實際控制輸出的字元數。
printf函式實際上是將所有參數按字元輸出,根據該函式的參數1(const char *format),我們不難理解。
例如:
int a=6, b;//a的值為6b = 24;//b的值為24printf( "the value of printf is:%d\n", a );printf( "%d\n", b );
以上程式將會輸出:
printf

套用示例

示例一
#include <stdio.h>#define C "C Programming"int main(void){    int a=12345;    float b=5.12345678;    char e,d,f;    scanf("%c %c %c",&e,&d,&f);    printf("int is:%d\n",a);    printf("float is:%f\n",b);    printf("char is:%s\n",C);     return 0;}
示例二
printf 也可以這樣用(具體請參照 C 語法,字元串相關內容。這不是 printf 特有功能):
printf("123\n","456\n","789\n");
輸出:
123
注意:
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;}
(此例中用到了?:的運算符)

相關詞條

熱門詞條

聯絡我們