C語言格式化輸入輸出-轉換說明符的用法


C語言格式化輸入輸出-轉換說明符的用法

本文主要介紹C語言中格式化輸入輸出語句中轉換說明(conversition specification)的用法

printf sprintf fprintf的轉換說明符

% [flags][width][.precision][length]specifier

flags 含義
- 左對齊
+ 有符號值為正數時,則在值前面加上正號;若為負,則在值前面加上負號
space 有符號值為正數時,則在值前面顯示空格;若為負,則在值前面加上負號
0 對於數值格式,使用0代替空格填充不足的字符;對於整數格式,如果使用了-標志或者指定精度,則該flag不起作用
# 把結果轉換成另一種格式。
如果為%o,則以0開始;
如果為%x或%X,則以0x或0X開始;
對於所有浮點類型,強制保留小數點;
對於%g或%G格式,則使其包含尾隨0
width 含義 .precision 含義
number 輸出的最小長度(字符數) .number 輸出的精度。
對於%e,%E和%f而言,表示小數點右邊數字的位數
對於%g,%G而言,表示有效數字最大位數
對於%s而言,表示待打印字符的最大數量
對於整型,表示待打印數字的最小位數
單獨使用..0的作用相同
* _number_的值由待打印項列表中對應的變量決定 .* _number_的值由待打印項列表中對應的變量決定

length和specifier組合,決定如何解釋待打印列表中對應變量的數據類型,其組合關系如下表所示

length d i u o x X f F e E g G a A c s p n
(none) int unsigned int double int char* void* int*
hh signed char unsigned char signed char*
h short int unsigned short int short int*
l long int unsigned long int wint_t wchar_t* long int*
ll long long int unsigned long long int long long int*
j intmax_t uintmax_t intmax_t*
z size_t size_t size_t*
t ptrdiff_t ptrdiff_t ptrdiff_t*
L long double

注:

(1) intmax_tuintmax_t定義在stdint.h中,是128位的整數類型

(2) size_t定義在stddef.h中(stdio.h已經包含該頭文件),是sizeof()的值的類型

(3) ptrdiff_t是表示兩個指針差值的類型

specifier 用於 specifier 用於
i或d int a或A 十六進制浮點數
u unsigned int c char
o 無符號八進制整數 C ISO寬字符類型(wchar_t)
x或X 無符號十六進制整數(X使用大寫) s char*字符串
f或F 浮點數類型(默認保留六位小數) p 指針(輸出十六進制地址)
e或E 顯示為科學計數法(保留六位小數) n 不輸出任何字符,但是會將到該位置前輸出的字符數存入后面對應的指針(默認為int*)所指的變量中
g或G 根據數值不同自動選擇是否使用科學計數法表示(不含尾隨0),長度更短者優先 % 輸出字符'%'

scanf sscanf fscanf的轉換說明符

%[*][width][length]specifier

*和width 含義
* 跳過對應的輸入項
(例如在語句scanf("%*d %*d %d",&n);中,僅將讀取到的第三個整數存入變量n中,前兩個值被忽略)
number 最大字符數。輸入達到最大字符數或第一次遇到空白字符時將停止
length d i u o x f e g a c s [] [^] p n
(none) int* unsigned int* float* char* void** int*
hh signed char* unsigned char* signed char*
h short int* unsigned short int* short int*
l long int* unsigned long int* double* wchar_t* long int*
ll long long int* unsigned long long int* long long int*
j intmax_t* uintmax_t* intmax_t*
z size_t* size_t* size_t*
t ptrdiff_t* ptrdiff_t* ptrdiff_t*
L long double*
specifier 用於
i 把輸入解釋整數,自動識別進制(輸入以0x開頭則為十六進制,以0開頭則為八進制,以1到9開頭則為十進制)
d或u 把輸入解釋為十進制整數(d表示有符號,u表示無符號)
o 把輸入解釋為有符號八進制整數
x 把輸入解釋為有符號十六進制整數
s 字符串(從第一個非空白字符開始,到下一個空白字符之前的所有字符都是輸入)
p 把輸入解釋成指針(地址)
a,e,f,g 把輸入解釋成浮點數(十進制或十六進制)
c 把輸入解釋成char字符(不忽略空白字符)
[chatacters]和[^characters] 掃描集,僅讀取包含在[]中的字符,排除包含在[^]中的字符,在第一個不匹配於[]中字符(或匹配於[^]中字符)的位置停止,最終讀入字符組成字符串,存入列表中對應的指針所指的連續內存空間中。
注意:僅適用於字符型變量


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM