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_t 和uintmax_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] | 掃描集,僅讀取包含在[]中的字符,排除包含在[^]中的字符,在第一個不匹配于[]中字符(或匹配于[^]中字符)的位置停止,最終讀入字符組成字串,存入串列中對應的指標所指的連續記憶體空間中, 注意:僅適用于字符型變數 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/270566.html
標籤:C
上一篇:C語言中定義&宣告的含義是什么?它們之間的區別又是什么?
下一篇:C語言進階
