printf 函數(shù)筆記

函數(shù)聲明

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

說明

<返回值> printf ("<格式化字符串>", <參數(shù)表>);

返回值

printf 返回輸出的字符長(zhǎng)度,輸出失敗則返回 -1。

printf("Hello World");

返回值為 12

格式化字符串

格式

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

說明

每個(gè)%分別對(duì)應(yīng)控制參數(shù)表中每個(gè)變量的輸出格式(%%除外,當(dāng) * 代替width或precision時(shí)亦對(duì)應(yīng)一個(gè)變量);
除%引導(dǎo)的部分外,可加入任意希望打印的字符。

specifier 參數(shù)類型 輸出格式
d char型,int型 十進(jìn)制整數(shù),當(dāng)變量存儲(chǔ)字符時(shí)輸出其十進(jìn)制內(nèi)碼
o int型,unsigned int型 八進(jìn)制整數(shù)
x,X int型,unsigned int型 十六進(jìn)制整數(shù)
u unsigned int型 十進(jìn)制整數(shù)
lld long long型 十進(jìn)制整數(shù)
llu unsigned long long型 十進(jìn)制整數(shù)
c char型,int型 單個(gè)字符
s char *型 字符串,順序打印字符數(shù)組中的字符直到遇到'\0'或已打印了由精度指定的字符數(shù)
f float型 十進(jìn)制實(shí)數(shù),默認(rèn)保留6位小數(shù)(遵循四舍五入原則)
lf double型 十進(jìn)制實(shí)數(shù),默認(rèn)保留6位小數(shù)(遵循四舍五入原則)
e,E float型,double型 用指數(shù)形式輸出十進(jìn)制實(shí)數(shù),默認(rèn)保留6位小數(shù)(遵循四舍五入原則)
g,G float型,double型 十進(jìn)制小數(shù),省略無意義的0(遵循四舍五入原則)
p void *型 輸出指針地址
% 不轉(zhuǎn)換參數(shù) 輸出一個(gè)%
flags 輸出格式
- 在給定的字段長(zhǎng)度內(nèi)左對(duì)齊,默認(rèn)為右對(duì)齊
+ 強(qiáng)制在結(jié)果之前顯示正號(hào)或負(fù)號(hào),默認(rèn)不顯示正號(hào)
空格 在給定的字段長(zhǎng)度內(nèi),若沒有寫入任何符號(hào),則插入一個(gè)空格
0 在給定的字段長(zhǎng)度內(nèi),若沒有寫入任何符號(hào),則插入一個(gè)0
# 與 o、x 或 X 一起使用時(shí),非零值前面會(huì)分別顯示 0、0x 或 0X;
與 e、E、f 或 lf 一起使用時(shí),會(huì)強(qiáng)制輸出包含一個(gè)小數(shù)點(diǎn),即使后邊沒有數(shù)字;
與 g 或 G 一起使用時(shí),尾部的零不會(huì)被移除
width/.precision 輸出格式
(number) width和.precision分別指定輸出所占字符數(shù)和輸出實(shí)數(shù)的精度
* 未指定精度,輸出精度取決于參數(shù)表中相應(yīng)的變量的值

注意當(dāng)輸出實(shí)際長(zhǎng)度即使不加空格也大于width規(guī)定的長(zhǎng)度,width將會(huì)被忽略。

參數(shù)表

參數(shù)表中形參的數(shù)量和類型與格式化字符串相適應(yīng),否則輸出可能發(fā)生異常;
每個(gè)形參用逗號(hào)( , )隔開。

示例

#include<stdio.h>
int main()
{
    double double1=3.141592654, double2=3.14;
    int integer=15;
    int b=15, c=8;
    printf("%d<\n十進(jìn)制整數(shù)\n", integer);
    printf("%x<\n十六進(jìn)制整數(shù)\n", integer);
    printf("%5d<\n指定占5個(gè)字符十進(jìn)制數(shù)\n", integer);
    printf("%*d<\n由變量c指定所占長(zhǎng)度十進(jìn)制數(shù)\n", c, integer);
    printf("%05d<\n位數(shù)不足補(bǔ)0\n", integer);
    printf("%#x<\n十六進(jìn)制帶0x\n\n", integer);
    
    printf("%lf<\n實(shí)數(shù)\n", double2);
    printf("%g<\n實(shí)數(shù)省略無意義的0\n", double2);
    printf("%#.0lf<\n只保留整數(shù)和小數(shù)點(diǎn)實(shí)數(shù)\n", double1);
    printf("%15.5lf<\n指定占15個(gè)字符保留5位小數(shù)實(shí)數(shù)\n", double1);
    printf("%*.*lf<\n指由變量b指定所占長(zhǎng)度,變量c指定保留小數(shù)位數(shù)\n\n", b, c, double1);

    printf("%-5d<\n占5位左對(duì)齊\n", integer);
    printf("%+d<\n輸出正號(hào)\n", integer);
    printf("%-+lf15.5<\n輸出正號(hào)左對(duì)齊,不足補(bǔ)0\n", double1);

    return 0;
}

輸出

15<
十進(jìn)制整數(shù)
f<
十六進(jìn)制整數(shù)
   15<
指定占5個(gè)字符十進(jìn)制數(shù)
      15<
由變量c指定所占長(zhǎng)度十進(jìn)制數(shù)
00015<
位數(shù)不足補(bǔ)0
0xf<
十六進(jìn)制帶0x

3.140000<
實(shí)數(shù)
3.14<
實(shí)數(shù)省略無意義的0
3.<
只保留整數(shù)和小數(shù)點(diǎn)實(shí)數(shù)
        3.14159<
指定占15個(gè)字符保留5位小數(shù)實(shí)數(shù)
     3.14159265<
指由變量b指定所占長(zhǎng)度,變量c指定保留小數(shù)位數(shù)

15   
占5位左對(duì)齊
+15<
輸出正號(hào)
+3.14159315.5<
輸出正號(hào)左對(duì)齊,不足補(bǔ)0

注意%3.2lf并不是指整數(shù)部分三位小數(shù)部分二位,而是指數(shù)字長(zhǎng)度為3,小數(shù)部分長(zhǎng)度為2;

而小數(shù)點(diǎn)也需要占一位,故輸出會(huì)出現(xiàn)問題。

#include<stdio.h>

int main()
{
    double a=13.1415;
    printf("%3.2lf\n", a);
}
13.14

Process returned 0 (0x0)   execution time : 0.352 s
Press any key to continue.

事實(shí)證明3被忽略,而這也恰好符合預(yù)期。

by sdust weilinfox

最后編輯于
?著作權(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ù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者。

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

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