printf()用法
printf()用法详解
一、printf()函数是式样化输出函数, 一般用于向准则输出设备按规定式样输出消息。正在编写步骤时经常会用到此函数。printf()函数的挪用式样为:
printf("<式样化字符串>",<参量表>);
其中式样化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出;另一部分是式样化规定字符, 以"%"开端, 后跟一个或几个规定字符, 用来确定输出内容式样。
参量表是需求输出的一系列参数, 其个数务必与式样化字符串所阐明的输出参数个数一样多, 各参数之间用","分开, 且顺序逐一对应, 不然将会出现意想不到的过失。
式样化字符串的式样是:
%[标志][输出最小宽度][.精度][长度]式样字符
1、标志
标志 意义
- 结果左对齐,右边填空格
+ 输出标记(正号或负号)
空格 输出值为正时输出空格,为负时输出负号
# 正在八进制和十六进制线显现前导航O,Ox
假如你还不太理解,没关系!请瞧下面的例子就会了如指掌了:
例1:
#include<stdio.h>
int main()
{
int a=100;
float b=123.255;
printf("a=%d\n",a); printf("a=%10d\n",a);
printf("a=%-10d\n",a);
printf("a=%+d\n",a);
printf("a=% d\n",a);
printf("a=%#o\n",a);
printf("a=%#x\n",a);
printf("b=%lf\n",b);
return 0;
}
运转结果
a=100
a= 100
a=100
a=+100
a= 100
a=0144
a=0x64
b=123.254997
2、输出最小宽度:(1)用十进制整数来表示输出的最少位数。(至多要输出这么多位!)
(2)若实际位数多于最小宽度:则按实际位数输出。
(3)若实际位数少于最小宽度:则a.右对齐,左边留空。
b.有负号,左对齐,右边留空
c.表示宽度的数字以0开端,则右对齐,左边填0。
我们再来瞧一个例子:
例2:
#include<stdio.h>
int main()
{
int a=3456;
printf("a=%3d\n",a); //若实际位数多于最小的宽度:则按实际位数输出
printf("a=%10d\n",a); //若实际位数少于最小的宽度:则右对齐,左边留空
printf("a=%-10d\n",a); //若实际位数少于最小的宽度:有负号,左对齐,右边留空
printf("a=%010d\n",a); //若实际位数少于最小的宽度:表示宽度的数字以0开端,则右对齐,左边填0
printf("a=%-010d\n",a); //左对齐,0无意义。
return 0;
}
运转结果:
a=3456
a= 3456
a=3456
a=0000003456
a=3456
3、精度:精度式样符以“.”开头,后跟十进制整数。意义是:假如输出数字,则表示小数的位数;若实际位数大于最小的精度数,则四舍五进。若不足则补0;假如输出的是字符,则表示输出字符的个数;若实际位数大于最小的精度数,则截去超出的部分。
例3:
#include<stdio.h>
int main()
{
char ch="abcdefg";
printf("%.3f\n",12.3456);
printf("%.9f\n",12.3456);
printf("%.3s\n",ch);
printf("%.9s\n",ch);
return 0;
}
运转结果:
12.346 //四舍五进到小数点后三位
12.345600000 //不足补0
abc
abcdefg
所以对例1中的printf("b=%lf",b)只需该为printf("b=%.2lf",b)就可以对结果进行2位小数的保存了!
printf("%*.*s\n",m,n,ch);
前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n 。我想这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。
4、长度:长度式样符为h,l两种,h表示按短整型量输出,l表示按长整型量输出。
5、式样字符:
式样 意义
————————————————————————————
d: - 以十进制方式输出带标记整数(正数不输出标记);
u: - 以十进制方式输出无标记整数;
f: - 以小数方式输出单、双精度实数;
e: - 以质数方式输出单、双精度实数;
g: - 以%f,%e中较短的输出宽度输出单、双精度实数;
c: - 输出单个字符;
s: - 输出字符串。
————————————————————————————
注:l正在d,o,x,u,前,指的输出精度为long型;正在e,f,g前,指定输出精度为double型
最后还是来谈些本义字符吧:
本义字符是C言语中表示字符的一种非凡方式。一般使用本义字符表示ASCII字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的单撇号( '),用于表示字符串常量的双撇号( ")和反斜杠( \)等。本义字符用反斜杠\后面跟一个字符或一个八进制或十六进制数表示。
本义字符 意义 ASCII值(十进制)
\a 响铃(BEL) 007
\b 退格(BS) 008
\f 换页(FF) 012
\n 换行(LF) 010
\r 回车(CR) 013
\t 程度制表(HT) 009
\v 笔挺制表(VT) 011
\\ 反斜杠 092
\? 问号字符 063
\' 单引号字符 039
\" 双引号字符 034
\0 空字符(NULL) 000
\ddd 恣意字符 三位八进制
\xhh 恣意字符 二位十六进制
字符常量中使用单引号和反斜杠以及字符常量中使用双引号和反斜杠时,都务必使用本义字符表示,即正在这些字符前加上反斜杠。
正在C步骤中使用本义字符\ddd或者\xhh可以方便灵便地表示恣意字符。\ddd为斜杠后面跟三位八进制数,该三位八进制数的值即为对应的八进制ASCII值。\x后面跟两位十六进制数,该两位十六进制数为对应字符的十六进制ASCII值。
使用本义字符时需求注重以下标题:
(1) 本义字符中只能使用小写字母,每个本义字符只能瞧作一个字符。
(2) \v 笔挺制表和\f 换页符对屏幕没有任何影响,但会影响打印机施行呼应作。
(3) 正在C步骤中,使用不可打印字符时,一般用本义字符表示。
其他需求注重的一些标题:
1.假如用浮点数表示字符或整型量的输特别式, 小数点后的数字代表最大宽度, 小数点前的数字代表最小宽度。
例如: %6.9s 表示显现一个长度不小于6且不大于9的字符串。若大于9, 则第9个字符卖前的内容将被增除。
2.使用printf函数时还要注重一个标题,那就是输出表列中的求值顺序。差别的编译零碎不一定相反,可以从左到右,也可从右到左。Turbo C是按从右到左进行的。请瞧下面两个例子:
例4:
#include<stdio.h>
int main()
{
int i=8;
printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);
return 0;
}
运转结果
8
7
7
8
-7
-8
例5:
#include<stdio.h>
int main()
{
int i=8;
printf("%d\n",++i);
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",i--);
printf("%d\n",-i++);
printf("%d\n",-i--);
return 0;
}
运转结果:
9
8
8
9
-8
-9
这两个步骤的区别是用一个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。但是务必注重,求值顺序虽是自右至左,但是输出顺序还是从左至右,因此得到的结果是上述输出结果。