山谈c中printf格式修饰符。c语言中之格式符。

废话不多说,简单粗暴地上图。

以Turbo C中格式字符串的形似式呢:
[标志][输出最小幅度][.精度][长度]种
其中方括号[]屡遭的项为可摘项。各项的义介绍如下:
1.类型类型字符用以代表输出数据的档次,其格式符和意义下表所示:
代表输出类型的格式字符       格式字符意义
d
                以十进制形式出口带符号整数(正数不出口符号)
o
                以八进制形式出口无符号整数(不出口前缀O)
x
                以十六进制形式出口无符号整数(不出口前缀OX)
u                 以十进制形式出口无符号整数
f                 以小数形式输出单、双精度实数
e                 以指数形式输出单、双精度实数
g
                以%f%e中比较短的输出宽度输出单、双精度实数
c                 输出单个字符
s                 输出字符串
2.标志
标志字符为-、+、#、空格四栽,其含义下表所示:
标志格式字符      标 志 意 义

(一)初始定义

  •          结果左对一头,右边填空格
    +
             输出符号(正号或负号)空格输出值为正时冠以空格,为负时冠以负号
    #          对c,s,d,u类无影响;对o类, 在出口时加前
    缀o         对x类,在出口时加前缀0x;对e,g,f
    类当结果发生小数时才吃有有些数点
    3.出口最小幅度
    于是十进制整数来表示输出的极度少位数。
    若实际位数多于定义的涨幅,则依照其实位数输出,
    若实际位数少于定义的增长率则补充为空格或0。
    4.精度
    精度格式符以“.”开头,后以及十进制整数。本项的义是:如果出口数字,则表示小数的位数;如果出口的是字符,
    则象征输出字符的个数;若实际位数大于所定义之精度往往,则截去超过的一对。
    5.长度
    长格式符为h,l两种,h表示按照短整型量输出,l表示按照长整型量输出。
    void main(){
    int a=15;
    float b=138.3576278;
    double c=35648256.3645687;
    char d=’p’;
    printf(“a=%d,%5d,%o,%x\n”,a,a,a,a);
    printf(“b=%f,%lf,%5.4lf,%e\n”,b,b,b,b);
    printf(“c=%lf,%f,%8.4lf\n”,c,c,c);
    printf(“d=%c,%8c\n”,d,d);
    } a<–15
    b<–138.3576278
    c<–35648256.3645687
    d<–’p’ main()
    {
    int a=29;
    float b=1243.2341;
    double c=24212345.24232;
    char c=’h’
    printf(“a=%d,%5d,%o,%x\n”,a,a,a,a);
    printf(“b=%f,%lf,%5.4lf,%e\n”,b,b,b,b);
    printf(“c=%lf,%f,%8.4lf\n”,c,c,c);
    printf(“d=%c,%8c\n”,d,d);
    }
    本例第七实行遭坐四种格式输出整型变量a的值,其中“%5d
    ”要求输出宽度为5,而a值为15不过出点儿号故补三单空格。
    第八实施遭为四种植格式输出实型量b的价值。其中“%f”和“%lf
    ”格式的出口相同,说明“l”符对“f”类型无影响。“%5.4lf”指定输出宽度为5,精度也4,由于实在尺寸超过5故应该遵循实际上位数输出,小数各类数超过4各类有为截去。第九履行输出双精度实数,“%8.4lf
    ”由于指定精度也4个故截去了跨越4个之部分。第十实践输出字符量d,其中“%bc
    ”指定输出宽度为8故在出口字符p之前补加7只空格。

图片 1

使用printf函数时还要注意一个题目,
那就算是出口表列中的求值顺序。不同的编译系统不必然同,可以从左到右,
也只是从右到左。Turbo C是遵循从右到左进行的。如将例2.13改观写如下述形式:
void main(){
int i=8;
printf(“%d\n%d\n%d\n%d\n%d\n%d\n”,++i,–i,i–,i++,-i–);
} i<–8

(二)运行结果

斯序和规章2.13对待只是把多单printf语句改一个printf
语句子输出。但由结果好看看是见仁见智的。为什么结果碰头不同也?就是因printf函数对输出表中各量求值的次第是从右至左进行
的。在典礼受,先对终极一项“-i–”求值,结果吗-8,然后i自减1继呢7。
再对“-i++”项求值得-7,然后i自增1后也8。再指向“i–”项求值得8,然后i再打减1后呢7。再要“i++”项得7,然后I再于增1后也8。
再请“–i”项,i先自减1后输出,输出值为7。
最后才告输出表列中的第一起“++i”,此时i自增1后输出8。但是必须注意,
求值顺序虽是自从右至左,但是出口顺序还是从错误到右,
因此赢得的结果是上述输出结果。

图片 2

摘自 meiyuli的专栏

(三)规律总结

http://www.bkjia.com/Cyy/492008.htmlwww.bkjia.comtruehttp://www.bkjia.com/Cyy/492008.htmlTechArticle在Turbo C中格式字符串的相似式呢:
[标志][输出最小幅度][.精度][长度]种
其中方括号[]遭遇的项为可挑选项。各项的义介绍如下: 1.类型…

于如下:

printf(“%7.4d”,12);

printf(“%4.7f”,123.456);

printf(“%12.7s”,”hello”);

相当于出口语句,

汇总成形如printf(“%a.bc”,d)格式的输出语句,其中d为int/float/char[]顶类别变量,c为d/f/s等格式符,a为前修饰符,b为晚修饰符。

原理如下:

1.前修饰符的断然值表示输出宽度限制;

2.晚修饰符表示输出精度限制;

3.率先考虑后修饰符,然后再次考虑前修饰符;

4.int型变量要求输出数字位数不低于精度限制,如果低于则用0在数字前补齐;

5.float型变量要求输出小数点后保留位数等于精度限制,多余部分让分开掉;

6.char[]种变量要求输出字符串长度不超精度限制,如果超出则用字符串后面多余的分开掉;

7.对此上三者变量都要求输出宽度不小于宽度限制,如果低于,则据此空格补齐;

8.前修饰符可正而据,后修饰符必须为刚。

8.面前修饰符如果为正数,则补齐宽度的空格在错,如果也负数,则补齐宽度的空格在右;

9.额外记忆:如果char[]路变量前修饰符以0开头,则补齐宽度不是因此空格,而是用0。

(四)举例记忆

【例1】printf(“%10.7s”,”12345678″);

首先考虑后修饰符-精度限制也7;要求输出字符串长度不高于精度限制,如果过量则将字符串后面多余的划分掉,”12345678″长度为8,多有一个,则用后面的“8”剪切掉,得到“1234567”;

接下来考虑前修饰符-输出宽度限制为10;此时要求输出宽度不小于宽度限制,如果低于,则因此空格补齐,现在长也7内需加3只空格达到涨幅10;

因前面修饰符为正数,所以补齐宽度的空格在错误,即出口格式应为“###1234567”//为好理解,空格符我为此#符代替。

【例2】printf(“%-7.4d”,123456);

率先考虑后修饰符-精度限制为4;要求输出数字位数不小于精度限制,此时位数为6勿低于4,满足条件;

接下来考虑前修饰符-输出宽度限制也7;此时求输出宽度不低于宽度限制,如果低于,则就此空格补齐,现在长也6欲补1单空格达到涨幅7;

因前修饰符为负数,所以补齐宽度之空格在右侧,即出口格式应为“1234566#”//为便于理解,空格符我为此#标志代替。

附图:验证分析是

图片 3

 

相关文章