C語言格式化說明符

2021-08-07 13:03:21 字數 4312 閱讀 6966

1.1.1 格式化輸入輸出函式

一、printf()函式

printf()函式是格式化輸出函式, 一般用於向標準輸出裝置按規定格式輸出

資訊。在編寫程式時經常會用到此函式。printf()函式的呼叫格式為:

printf("《格式化字串》", 《參量表》);

其中格式化字串包括兩部分內容: 一部分是正常字元, 這些字元將按原

樣輸出; 另一部分是格式化規定字元, 以"%"開始, 後跟乙個或幾個規定字元,

用來確定輸出內容格式。

參量表是需要輸出的一系列引數, 其個數必須與格式化字串所說明的輸出

引數個數一樣多, 各引數之間用","分開, 且順序一一對應, 否則將會出現意想

不到的錯誤。

1. 格式化規定符

turbo c2.0提供的格式化規定符如下:

━━━━━━━━━━━━━━━━━━━━━━━━━━

符號 作用

——————————————————————————

%d 十進位制有符號整數

%u 十進位制無符號整數

%f 浮點數

%s 字串

%c 單個字元

%p 指標的值

%e 指數形式的浮點數

%x, %x 無符號以十六進製制表示的整數

%0 無符號以八進位制表示的整數

%g 自動選擇合適的表示法

━━━━━━━━━━━━━━━━━━━━━━━━━━

說明:(1). 可以在"%"和字母之間插進數字表示最大場寬。

例如: %3d 表示輸出3位整型數, 不夠3位右對齊。

%9.2f 表示輸出場寬為9的浮點數, 其中小數字為2, 整數字為6,

小數點佔一位, 不夠9位右對齊。

%8s 表示輸出8個字元的字串, 不夠8個字元右對齊。

如果字串的長度、或整型數字數超過說明的場寬, 將按其實際長度輸出。

但對浮點數, 若整數部分位數超過了說明的整數字寬度, 將按實際整數字輸出;

若小數部分位數超過了說明的小數字寬度, 則按說明的寬度以四捨五入輸出。

另外, 若想在輸出值前加一些0, 就應在場寬項前加個0。

例如: %04d 表示在輸出乙個小於4位的數值時, 將在前面補0使其總寬度

為4位。

如果用浮點數表示字元或整型量的輸出格式, 小數點後的數字代表最大寬度,

小數點前的數字代表最小寬度。

例如: %6.9s 表示顯示乙個長度不小於6且不大於9的字串。若大於9, 則

第9個字元以後的內容將被刪除。

(2). 可以在"%"和字母之間加小寫字母l, 表示輸出的是長型數。

例如: %ld 表示輸出long整數

%lf 表示輸出double浮點數

(3). 可以控制輸出左對齊或右對齊, 即在"%"和字母之間加入乙個"-" 號可

說明輸出為左對齊, 否則為右對齊。

例如: %-7d 表示輸出7位整數左對齊

%-10s 表示輸出10個字元左對齊

2. 一些特殊規定字元

━━━━━━━━━━━━━━━━━━━━━━━━━━

字元 作用

——————————————————————————

\n 換行

\f 清屏並換頁

\r 回車

\t tab符

\xhh 表示乙個ascii碼用16進表示,

其中hh是1到2個16進製制數

━━━━━━━━━━━━━━━━━━━━━━━━━━

例1:

1 #include2 #include

3int

main()

4

上面結果中的位址值在不同計算機上可能不同。

例1.中第一條語句#include的含義是呼叫另乙個檔案stdio.h, 這

是乙個標頭檔案, 其中包括全部標準輸入輸出庫函式的資料型別定義和函式說明。

二、scanf()函式

scanf()函式是格式化輸入函式, 它從標準輸入裝置(鍵盤) 讀取輸入的資訊。

其呼叫格式為:

scanf("《格式化字串》", 《位址表》);

格式化字串包括以下三類不同的字元;

1. 格式化說明符: 格式化說明符與printf()函式中的格式說明符基本相同。

2. 空白字元: 空白字元會使scanf()函式在讀操作中略去輸入中的乙個或多

個空白字元。

3. 非空白字元: 乙個非空白字元會使scanf()函式在讀入時剔除掉與這個非

空白字元相同的字元。

位址表是需要讀入的所有變數的位址, 而不是變數本身。這與printf()函式

完全不同, 要特別注意。各個變數的位址之間同","分開。

例2:

1

main()

2

上例中的scanf()函式先讀乙個整型數, 然後把接著輸入的逗號剔除掉, 最

後讀入另乙個整型數。如果","這一特定字元沒有找到, scanf()函式就終止。若

引數之間的分隔符為空格, 則引數之間必須輸入乙個或多個空格。

說明:(1). 對於字串陣列或字串指標變數, 由於陣列名和指標變數名本身就

是位址, 因此使用scanf()函式時, 不需要在它們前面加上"&"操作符。

例3:

1

mian()

2

(2). 可以在格式化字串中的"%"各格式化規定符之間加入乙個整數, 表示

任何讀操作中的最大位數。

如例3中若規定只能輸入10字元給字串指標p, 則第一條scanf() 函式語句

變為scanf("%10s", p);

程式執行時一旦輸入字元個數大於10, p就不再繼續讀入, 而後面的乙個讀

入函式即scanf("%s", str)就會從第11個字元開始讀入。

實際使用scanf()函式時存在乙個問題, 下面舉例進行說明:

當使用多個scanf()函式連續給多個字元變數輸入時,

例如:

1

main()

2

執行該程式, 輸入乙個字元a後回車 (要完成輸入必須回車), 在執行scanf

("%c", &c1)時, 給變數c1賦值"a", 但回車符仍然留在緩衝區內, 執行輸入語句

scanf("%c", &c2)時, 變數c2輸出的是一空行, 如果輸入ab後回車, 那麼輸出結

果為: c1 is a, c2 is b。

要解決以上問題, 可以在輸入函式前加入清除函式fflush()( 這個函式的使

用方法將在本節最後講述)。

修改以上程式變成:

1

main()

2

1.1.2 非格式化輸入輸出函式

非格式化輸入輸出函式可以由上面講述的標準格式化輸入輸出函式代替, 但

這些函式編譯後**少, 相對占用記憶體也小, 從而提高了速度, 同時使用也比較

方便。下面分別進行介紹。

一、puts()和gets()函式

1. puts()函式

puts()函式用來向標準輸出裝置(螢幕)寫字串並換行, 其呼叫格式為:

puts(s);

其中s為字串變數(字串陣列名或字串指標)。

puts()函式的作用與語printf("%s\n", s)相同。

例4:

1

main()

2

說明:(1). puts()函式只能輸出字串, 不能輸出數值或進行格式變換。

(2). 可以將字串直接寫入puts()函式中。如:

puts("hello, turbo c2.0");

2. gets()函式

gets()函式用來從標準輸入裝置(鍵盤)讀取字串直到回車結束, 但回車符

不屬於這個字串。其呼叫格式為:

gets(s);

其中s為字串變數(字串陣列名或字串指標)。

gets(s)函式與scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s)

函式輸入字串時存在乙個問題, 就是如果輸入了空格會認為輸入字串結束,

空格後的字元將作為下乙個輸入項處理, 但gets() 函式將接收輸入的整個字元

串直到回車為止。

例5:

1

main()

2

C語言格式轉換說明符

各項的意義介紹如下 1 型別 型別字元用以表示輸出資料的型別,其格式符和意義如下表所示 格式字元 意 義 d 以十進位制形式輸出帶符號整數 正數不輸出符號 o 以八進位制形式輸出無符號整數 不輸出字首0 x,x 以十六進製制形式輸出無符號整數 不輸出字首ox u 以十進位制形式輸出無符號整數 f 以...

c 格式說明符

結構體變數用 運算子來訪問結構體的成員 指向結構體的指標用 來訪問其指向的結構體的成員 c 字元 d 十進位制整數 e 浮點數,指數e的形式 s 字串 e 浮點數,指數e的形式 u 無符號十進位制整數 f 浮點數,小數點形式 g 輸出 f與 e較短者 o 無符號八進位制整數 g 輸出 f與 e較短者...

格式化說明符以及修飾符(整理)

摘要 最近用到一些格式化輸出符,除錯老提示型別不對,故整理一下,方便檢視。轉換說明符 意 義 c把輸入解釋成乙個字元 d把輸入解釋成乙個有符號十進位制整數 e,f,g,a 把輸入解釋成乙個浮點數 a 是c99標準 e,f,g,a 把輸入解釋成乙個浮點數 a是c99標準 i把輸入解釋成乙個有符號十進位...