printf

printf

printf()函式是格式化輸出函式, 一般用於向標準輸出設備按規定格式輸出信息。

printf()函式的調用格式為: printf("<格式化字元串>", <參量表>)。

格式輸出,它是c語言中產生格式化輸出的函式(在 stdio.h 中定義)。用於向終端(顯示器、控制台等)輸出字元。格式控制由要輸出的文字和數據格式說明組成。要輸出的文字除了可以使用字母、數字、空格和一些數字元號以外,還可以使用一些轉義字元表示特殊的含義。

基本介紹

  • 中文名:格式化輸出
  • 外文名:Print Format
  • 外語縮寫:printf(函式名)
  • 頭檔案:stdio.h
原型,功能,用法,

原型

extern int printf(const char *format,...);

功能

在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
Format 參數是包含三種對象類型的一個字元串:
* 無格式字元複製到輸出流;
* 轉換規範,每個規範導致在值參數列表中檢索 1 個或更多個項;
* 轉義序列。
通常意義上format的格式如下:
%[flags][width][.prec][F|N|h|l]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保留
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 轉換中字元串的最大列印位元組數目。
F|N|h|l
表示指針是否是遠指針或整數是否是長整數
F 遠指針
N 近指針
h 短整數(short int)
l 長整數(long int) (此處如果與d搭配為%lld則為long long int(C99),與f搭配為%llf則為long double(C99))
[Argument]
包含需要輸出的數據,可以是常量(字元常量、數字常量、字元串常量),變數,以及運算式。此處的數據應當與前面的format中的格式控制符一一對應(如果不對應會產生錯誤)。
例如:
int a=1;float b=1.0;char str[12]="Hello World";printf("This is an example of printf:\n");printf("a is %d,b is %f,and a+b=%f",a,b,a+b);printf("I want to say,%s",str);
轉義序列
這些轉義序列在字元串中會被自動轉換為相應操作命令
表示
符號
意義
符號
意義
\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]);
以上形式,我們在Visual C++里輸入“printf”(將會看到)。
說明printf函式類型為整型,其返回值是整型值。
其值為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;}
(此例中用到了?:的運算符)
例四
#include <stdio.h>#include<string.h>int main(void){    char ch[20];    int m,n;    strcpy(ch,"Happy!");    scanf("%d%d",&m,&n);    printf("%*.*s\n",m,n,ch);    return 0;}
(此例中使用了scanf函式和strcpy函式)
其中前邊*定義的是總的寬度,後邊*是指定輸出字元個數。分別對應外邊參數m和n。
輸入:
10 3
輸出:
Hap環境變數
下列環境變數影響 printf 命令的執行:
LANG 在 LC_ALL 和相應的環境變數(以 LC_ 開頭)沒有指定語言環境時,確定語言環境編目使用的語言環境。
LC_ALL 確定用於覆蓋由 LANG 或其它任何 LC_環境變數設定的任何語言環境編目值的語言環境。
LC_CTYPE 確定把文本位元組數據順序解釋為字元的語言環境;例如,單一位元組對應多位元組字元的參數。
LC_MESSAGES 確定寫訊息使用的語言。
LC_NUMERIC 確定數字格式編排的語言環境。此環境變數影響使用 e、E、f、g 和 G 轉換字元編寫的數字的格式。

相關詞條

熱門詞條

聯絡我們