一.printf函数
函数原型:
int printf(const char *format,[argument]);
format 参数输出的格式,定义格式为:
%[flags][width][.perc] [F|N|h|l]type
返回打印字符的个数。
例如printf("%d",printf("%d\t",32));则输出32 3.原因是里面的printf打印32(\t的输出),返回值是打印字符的个数,打印出来的是32 ,共3个字符(带转义的字符),因此输出外面的printf输出3.
1.type常用的格式。
%d---有符号的十进制数,
%u---无符号的十进制数 ,
%o---无符号的八进制数,
%x---有符号的十六进制数,输出abcdef时是小写。
%X---有符号的十六进制,输出abcdef时是大写。
%f---double型的。默认的是输出到小数点后六位,整数部分全部输出,四舍五入取值。
%e---double的标准的指数形式输出,形式如ae+c 即a是1-10之间的数,保留6位小数,c是整数。e是代表指数10.
%E---和%e类似,输出时的e是大写的E。%e和%E是针对double的,参数是整数是结果不正确,需要强制转换。
%c---输出一个字符。
%s---输出一个字符串,直到遇到字符串结束符'\0'。
%%---输出一个百分号%。
2.对齐和输出位数控制
2.1 flags 规定输出格式,取值和含义如下:
取值 | 含义 |
无 | 默认值,右对齐输出 |
-(减号) | 左对齐,右边填充空格 |
+(加号) | 在数字前增加符号 +/- ,一般输出负数时是会有符号输出的,输出非负数时是不会输出正号+。 当在前面加+号时输出非负数(包括0)时就会带有符号。 |
# |
type=c,s,d,i,u时没有影响 type=o,x,X时,分别在数值前增加'0',"0x","0X", type=e,E,f时,总是使用小数点 type=g,G时,除了数值为0外总是显示小数点 |
例如 : int a = 10; printf("a=%+d",a); 就会输出a=+10;即会把符号位输出。
例如 :printf("%x,%#x",16,16);则输出10,0x10
取值 | 含义 |
n(n=1,2,3...) | 宽度至少为n位,不够以空格填充,足够则正常输出 |
0n(n=1,2,3...) | 宽度至少为n位,不够左边以0填充 |
* |
格式列表中,下一个参数还是width,width由外界提供 |
无 | 默认值,不对宽度控制 |
例如printf("%*s",5,"abc");则输出##abc,#代表空格,应为width是*,传的数字是5(也可以是赋了值的变量);等价为printf("%5s","abc");宽度至少为5,不足则加了空格。
可以取值有(0,n(正整数),*三种)
取值 | 含义 |
.0 |
当type=d,i,o,u,x时,没有影响 |
.n |
n(n=1,2,3...) 当type=e,E,f时表示的最大小数位数 |
.* | 格式列表中,下一个参数还是prec,即由传的参数控制 |
无 | 默认值,不控制,按缺省精度控制 |
2.4.F|N|h|l 表示指针是否是远指针或整数是否是长整数
F 远指针
n 近指针
h
l 长整数或双精度浮点数
最长用的可能就是l了,即long int a; printf("%ld ",a);用来输出一个长整型数。二:sprintf函数
字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。
函数原型:int sprintf( char *buffer, const char *format, [ argument] … );
相对于printf来说,多了一个char*的参数,后面的参数和printf的参数意义相同。返回值是写入字符的个数。
和printf不同的是sprintf输出到到buffer中,printf是输出到控制台上。
此函数可以用来把整数转为字符串。
这个函数用起来不太安全,没有对buffer限制,可能会有溢出,一些带有buffer限制的函数原型如下:
int sprintf_s(char *buffer,size_t sizeOfBuffer,const char *format, [argument] ... );