函數(shù)聲明
int printf (const char*, ...);
說(shuō)明
<返回值> printf ("<格式化字符串>", <參數(shù)表>);
返回值
printf 返回輸出的字符長(zhǎng)度,輸出失敗則返回 -1项玛。
如
printf("Hello World");
返回值為 12
格式化字符串
格式
%[flags][width][.precision]specifier
說(shuō)明
每個(gè)%分別對(duì)應(yīng)控制參數(shù)表中每個(gè)變量的輸出格式(%%除外,當(dāng) * 代替width或precision時(shí)亦對(duì)應(yīng)一個(gè)變量)辽慕;
除%引導(dǎo)的部分外神汹,可加入任意希望打印的字符。
specifier | 參數(shù)類(lèi)型 | 輸出格式 |
---|---|---|
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ù)缝呕,省略無(wú)意義的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)供常,若沒(méi)有寫(xiě)入任何符號(hào)摊聋,則插入一個(gè)空格 |
0 | 在給定的字段長(zhǎng)度內(nèi),若沒(méi)有寫(xiě)入任何符號(hào)话侧,則插入一個(gè)0 |
# | 與 o栗精、x 或 X 一起使用時(shí),非零值前面會(huì)分別顯示 0瞻鹏、0x 或 0X; 與 e鹿寨、E新博、f 或 lf 一起使用時(shí),會(huì)強(qiáng)制輸出包含一個(gè)小數(shù)點(diǎn)脚草,即使后邊沒(méi)有數(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ù)量和類(lèi)型與格式化字符串相適應(yīng),否則輸出可能發(fā)生異常倔撞;
每個(gè)形參用逗號(hào)( , )隔開(kāi)讲仰。
示例
#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ù)省略無(wú)意義的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ù)省略無(wú)意義的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)問(wè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