C C語言中的printf和scanf

2021-07-22 15:35:26 字數 4019 閱讀 2226

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

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

format 引數是包含三種物件型別的乙個字串:

* 無格式字元複製到輸出流

* 轉換規範,每個規範導致在值引數列表中檢索 1 個或更多個項

* 轉義序列

通常意義上format的格式如下:

%[flags][width][.prec][f|n|h|l]type

type的字元用於規定輸出資料的型別,含義如下:

字元對應資料型別含義d

int接受整數值並將它表示為有符號的十進位制整數

ounsigned int

無符號8進製整數(不輸出字首0)

u

unsigned int

無符號10進製整數

x / x

unsigned int

無符號16進製制整數,x對應的是abcdef,x對應的是abcdef(不輸出字首0x)

f(lf)

float(double)

單精度用f,雙精度用lf(尤其scanf不能混用)

e / e

double

科學計數法表示的數,此處"e"的大小寫代表在輸出時用的「e」的大小寫

g / g

double

有效位數,如:%8g表示單精度浮點數保留8位有效數字。雙精度用lg

c

char

字元型。可以把輸入的數字按照ascⅱ碼相應轉換為對應的字元

s / s

char * / wchar_t *

字串。輸出字串中的字元直至字串中的空字元(字串以'\0『結尾,這個'\0'即空字元)

p

void *

以16進製制形式輸出指標

nint *

到此字元之前為止,一共輸出的字元個數,不輸出文字

%

無輸入不進行轉換,輸出字元『%』(百分號)本身

m無列印errno值對應的出錯內容,(例: printf("%m\n"); )

注:%g、%g在小數點位數四位或指數大於等於精度時用%e、%e,否則用%f。

flags 規定輸出樣式,取值和含義如下:

字元

字元名稱說明-

減號左對齊,右邊填充空格(預設右對齊)

+

加號在數字前增加符號 + 或 -

0

數字零將輸出的前面補上0,直到佔滿指定列寬為止(不可以搭配使用「-」)

空格輸出值為正時加上空格,為負時加上負號

#

井號type是o、x、x時,增加字首0、0x、0x

type是e、e、f、g、g時,一定使用小數點

type是g、g時,尾部的0保留

用於控制顯示數值的寬度,取值和含義如下:

n(n=1,2,3,4,5,6...): 寬度至少為n位,不夠以空格填充。

* 格式列表中,下乙個引數還是width

width是乙個可選的指定最小值字段寬度的十進位制數字字串。如果轉換值字元少於字段寬度,該字段將從左到右按指定的字段寬度填充。如果指定了左邊調整選項,欄位將在右邊填充。如果轉換結果寬於字段寬度,將擴充套件該字段以包含轉換後的結果。不會發生截斷。然而,小的精度可能導致在右邊發生截斷。

用於控制小數點後面的位數,取值和含義如下:

無按預設精度顯示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 短整數(short int)

l 長整數(long int) (此處如果與d搭配為%lld則為long long int(c99),與f搭配為%llf則為long double(c99))

[argument]

包含需要輸出的資料,可以是常量(字元常量、數字常量、字串常量),變數,以及表示式。此處的資料應當與前面的format中的格式控制符一一對應(如果不對應會產生錯誤)。

int scanf(const char * restrict format,...);

函式 scanf() 是從標準輸入流stdio (標準輸入裝置,一般指向鍵盤)中讀內容的通用子程式,可以說明的格式讀入多個字元,並儲存在對應位址的變數中。

表示讀入的資料將被捨棄。帶有*的格式指令不對應可變引數列表中的任何資料。

以乙個非零的十進位制整數形式出現。表示該格式指令最多讀入的字元數。

c 讀入域寬指定的數目個字元組成的字串行(後面不會加上空位元組),如果省略寬度則讀入單字元。如%c或%1c讀入單字元,%2c讀入兩個字元(後面不會加上空位元組),以此類推。

s讀入乙個以空白字元結束的字串行,後面會加上空位元組。

d 讀入可選有符號(可選有符號表示輸入時可以帶符號也可以不帶符號,不帶符號則視為非負)十進位制整數。輸入格式應該像strtol函式的base實參為10呼叫時識別的字串行一樣。

i 讀入可選有符號整數。輸入格式應該像strtol函式的base實參為0呼叫時識別的字串行一樣。

a,e,f,g,a,e,f,g 讀入可選有符號浮點數,輸入格式應該像strtod函式識別的字串行一樣。

o 讀入可選有符號八進位制整數。輸入格式應該像strtoul函式的base實參為8呼叫時識別的字串行一樣。

x,x讀入可選有符號十六進製制整數。輸入格式應該像strtoul函式的base實參為16呼叫時識別的字串行一樣。

p 讀入乙個指標值。讀入的字串行應該與fprintf的%p產生的字串行形式相同。

n 不讀入任何字元,而是把到該位置已讀入的字元數儲存到與之對應的int*指向的位置。本轉換說明符如果帶有*或者帶有域寬資訊(如:%*n或%3n等),則後果是未定義的。

u 讀入可選有符號八進位制整數。輸入格式應該像strtoul函式的base實參為10呼叫時識別的字串行一樣。

[ 掃瞄字元集合

% 讀入% 符號(百分號)

無效的轉換說明符將引起未定義的行為。

hh與d, i, o, u, x, x, or n配合使用,表示對應乙個signed char或unsigned char資料。

h與d, i, o, u, x, x, or n配合使用,表示對應乙個short int或unsigned short int資料。

l 與d, i, o, u, x, x, or n配合使用,表示對應乙個long int或unsigned long int資料;與a, a, e, e, f, f, g, or g配合使用表示對應乙個double資料;與c,s,[配合使用表示對應wchar_t資料。

ll與d, i, o, u, x, x, or n配合使用,表示對應乙個long long int或unsigned long long int資料。

j與d, i, o, u, x, x, or n配合使用,表示對應乙個intmax_t或uintmax_t資料。

z與d, i, o, u, x, x, or n配合使用,表示對應乙個size_t資料(或與size_t對應的有符號整型資料)。

t與d, i, o, u, x, x, or n配合使用,表示對應乙個ptrdiff_t資料(或與ptrdiff_t對應的無符號整型資料)。

l 與a, a, e, e, f, f, g, or g配合使用,表示對應乙個long double資料。

如果長度修飾符與格式說明符不匹配則引起未定義的行為。

空白字元會使scanf函式在讀操作中略去輸入中的乙個或多個空白字元。

C語言中printf的語法

c中格式字串的一般形式為 標誌 輸出最小寬度 精度 長度 型別,其中方括號中的項為可選項。各項的意義介紹如下 1.型別型別字元用以表示輸出資料的型別,其格式符和意義下表所示 表示輸出型別的格式字元 格式字元意義 a 浮點數 十六進製制數字和p 計數法 c99 a 浮點數 十六進製制數字和p 計數法 ...

Go語言中Printf 的用法

printf 在使用時需要給它指定乙個格式化規則,下面就詳細列舉一下他的用法 package main import fmt import os type point struct func main fmt.printf v n p 如果值是乙個結構體,v 的格式化輸出內容將包括結構體的欄位名。f...

C語言中的printf函式

c語言中的 g是printf 函式的乙個輸出格式化型別,它表示以 f e中較短的輸出寬度 輸出單雙精度實數,在指數小於 4或者大於等於精度時使用 e格式 02g 02表示不足兩位,前面補0輸出 超過兩位的不影響 root localhost seq printf 02x n 0x123 123 ro...