第四章 字符串的格式化輸入/輸出——《C Primer Plus》筆記

第四章 字符串的格式化輸入/輸出

4.1 前導(dǎo)程序

4.2 字符串簡(jiǎn)介

C 語(yǔ)言沒(méi)有專門用于儲(chǔ)存字符串的變量類型,字符串都被儲(chǔ)存 char 類型的數(shù)組中。

C 字符串:字符末尾帶有空字符 \0。

strlen() 函數(shù)返回字符串大小不包含空字符。

4.3 常量和 C 預(yù)處理器

符號(hào)常量:用宏定義如:#define TAXRATE 0.015,TAXRATE 會(huì)在編譯時(shí)替換又叫 明示常量。

C 頭文件 linits.hfloat.h 分別提供了與整數(shù)類型和浮點(diǎn)類型大小限制相關(guān)的詳細(xì)信息。

limits.h 中的一些明示常量

明示常量 含義
CHARBIT char 類型的位數(shù)
CHARMAX char 類型的最大值
CHARMIN char 類型的最小值
SCHARMAX signed char 類型的最大值
SCHARMIN signed char 類型的最小值
UCHARMAX unsigned char 類型的最大值
SHRTMAX short 類型的最大值
SHRTMIN short 類型的最小值
USHRTMAX unsigned short 類型的最大值
INTMAX int 類型的最大值
INTMIN int 類型的最小值
UINTMAX unsigned int 的最大值
LONGMAX long 類型的最大值
LONGM1N long 類型的最小值
ULONGMAX unsigned long 類型的最大值
LLONGMAX long long 類型的最大值
LLONGMIN long long 類型的最小值
ULLONCMAX unsigned long long 類型的最大值

float.h 中的一些明示常量

明示常量 含義
FLT_MANT_DIG float 類型的尾數(shù)位數(shù)
FLT_DIG float 類型的最少有效數(shù)字位數(shù)(十進(jìn)制)
FLT_MIN_10_EXP 帶全部有效數(shù)字的 float 類型的最小負(fù)指數(shù)(以 10 為底)
FLT_MAX_10_EXP float 類型的最大正指數(shù)(以 10 為底)
FLT_MIN 保留全部精度的 float 類型最小正數(shù)
FLT_MAX float 類型的最大正數(shù)
FLT_EPSILON 1.00 和比 1.00 大的最小 float 類型值之間的差值

4.4 printf() 和 scanf()

轉(zhuǎn)換說(shuō)明及其打印的輸出結(jié)果

轉(zhuǎn)換說(shuō)明 輸出
%a 浮點(diǎn)數(shù)、十六進(jìn)制數(shù)和p記數(shù)法(C99/C11
%A 浮點(diǎn)數(shù)、十六進(jìn)制數(shù)和p記數(shù)法(C99/C11
%c 單個(gè)字符
%d 有符號(hào)十進(jìn)制整數(shù)
%e 浮點(diǎn)數(shù),e 記數(shù)法
%E 浮點(diǎn)數(shù),e 記數(shù)法
%f 浮點(diǎn)數(shù),十進(jìn)制記數(shù)法
%g 根據(jù)值的不同,自動(dòng)選擇 %f%e。%e 格式用于指數(shù)小于 -4 或者大于或等于精度時(shí)
%G 根據(jù)值的不同,自動(dòng)選擇 %f%e。%e 格式用于指數(shù)小于 -4 或者大于或等于精度時(shí)
%i 有符號(hào)十進(jìn)制整數(shù)(與相同)
%o 無(wú)符號(hào)八進(jìn)制整數(shù)
%p 指針
%s 字符串
%u 無(wú)符號(hào)十進(jìn)制整數(shù)
%x 無(wú)符號(hào)十六進(jìn)制整數(shù),使用十六進(jìn)制數(shù) 0f
%X 無(wú)符號(hào)十六進(jìn)制整數(shù),使用十六進(jìn)制數(shù) 0F(大寫)
%% 打印一個(gè)百分號(hào)

printf() 的修飾符

修飾符 含義
標(biāo)記 下表描述了 5 種標(biāo)記(-、+、空格、# 和 0),可以不使用標(biāo)記或使用多個(gè)標(biāo)記。示例:"%-10d"
數(shù)字 最小字段寬度;如果該字段不能容納待打印的數(shù)字,系統(tǒng)會(huì)使用更寬的字段。示例:"%4d"
.數(shù)字 精度;對(duì)于 %e、%E%f 轉(zhuǎn)換,表示小數(shù)點(diǎn)右邊數(shù)字的位數(shù);對(duì)于 %G%G 轉(zhuǎn)換,表示有效數(shù)字最大位數(shù);對(duì)于 %s 轉(zhuǎn)換,表示待打印字符的最大數(shù)量;對(duì)于整型轉(zhuǎn)換,表示待打印數(shù)字的最小位數(shù);如有必要,使用前導(dǎo) 0 來(lái)達(dá)到這個(gè)位數(shù);只使用 . 表示其后跟隨一個(gè) 0,所以 %.f%.0f 相同。示例:"%5.2f" 打印一個(gè)浮點(diǎn)數(shù),字段寬度為 5 字符,其中小數(shù)點(diǎn)后有兩位數(shù)字。
h 和整型轉(zhuǎn)換說(shuō)明一起使用,表示 short intunsigned short int 類型的值。示例:"%hu"、"%hx""%6.4hd"
hh 和整型轉(zhuǎn)換說(shuō)明一起使用,表示 signed charunsigned char 類型的值。示例:"%hhu""%hhx"、"%6.4hhd"
j 和整型轉(zhuǎn)換說(shuō)明一起使用,表示 intmax_tuintmax_t 類型的值。這些定義在 stdint.h 中。示例:"%jd"、"%8jx"。
l 和整型轉(zhuǎn)換說(shuō)明一起使用,表示 long intunsigned long int 類型的值。示例:"%ld"、"%8lu"。
ll 和整型轉(zhuǎn)換說(shuō)明一起使用,表示 long long intunsigned long long int 類型的值(C99)。示例:"%lld"、"%8llu"
L 和浮點(diǎn)數(shù)轉(zhuǎn)換說(shuō)明一起使用,表示 long double 類型的值。示例:"%Ld"、"%10.4Le"。
t 和整型轉(zhuǎn)換說(shuō)明一起使用,表示 ptrdiff_t 類型的值。ptrdiff_t是兩個(gè)指針差值的類型(C99)。示例:"%td"、"%12ti"。
z 和整型轉(zhuǎn)說(shuō)明一起使用,表示 sizet_t 類型的值。size_tsizeof 返回的型(C99)。示例:"%zd"、"%12zd"。

printf() 中的標(biāo)記

標(biāo)記 含義
- 待打印項(xiàng)左對(duì)齊。即,從字段的左側(cè)開始打印該項(xiàng)。示例:"%-20s"
+ 有符號(hào)值若為正,則在前面顯示加號(hào);若為負(fù),則在值前面顯示減號(hào)。示例:"%+6.2f"
空格 有符號(hào)值若為正,則在前面顯示前導(dǎo)空格(不顯示任何符號(hào));若為負(fù),則在值前面顯示減號(hào)+標(biāo)記覆蓋一個(gè)空格。示例:"%6.2f"
# 把結(jié)果轉(zhuǎn)為另一種形式。如果是 %o 格式,則以 0 開始;如果是 %x%X 格式,則以 0x0X 開始;對(duì)于所有的浮點(diǎn)格式,# 保證了即使后面沒(méi)有任何數(shù)字,也打印一個(gè)小數(shù)點(diǎn)字符。對(duì)于 %g%G 格式,# 防止結(jié)果后面的 0 被刪除。示例:"%#o"、"%#8.0f"、"%+#10.3e"
0 對(duì)于數(shù)值格式,用前導(dǎo) 0 代替空格填充字段寬度。對(duì)于整數(shù)格式,如果出現(xiàn)-標(biāo)記或指定精度,則忽略改標(biāo)記。

printf() 要注意轉(zhuǎn)換說(shuō)明要與待打印值得類型匹配。這是 printf() 不定參數(shù)要求,原理:將待打印值壓棧,根據(jù)轉(zhuǎn)換類型出棧。所以轉(zhuǎn)換類型如果不一致(壓棧、出棧大小不一樣)可能會(huì)破壞棧結(jié)構(gòu)。

scanf()printf() 轉(zhuǎn)換說(shuō)明類似。

scanf() 格式化輸入,要求遵循指定格式才能正確輸入。

scanf() 返回值:0:格式不匹配;EOF:檢測(cè)到文件尾。

*** 修飾符**

  • printf() 通過(guò)程序指定字段寬度。如下:

    printf("The number is %*d\n", 7, number);
    
  • scanf() 跳過(guò)相應(yīng)的輸入項(xiàng),僅讀取指定項(xiàng)。如下:

    scanf("%*d %*d %d", &n);
    

C 語(yǔ)言有其本地化設(shè)置。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容