printf函数族

printf("%d + %c = %i\n", a, b, c)
fprintf与printf类似,fprintf是把数据写到任何文件中,第一个参数是任意文件指针。printf相当于是第一个参数默认为stdout的fprintf函数,如下所示:
printf(stuff);
fprintf(stdout,stuff);

fprintf简单示例:

fprintf(fp, "%d\n", i);//fp为文件指针

接下来是sprintf函数,第一个参数是一个指向字符数组的指针,sprintf把输出数据写到这个字符数组中。同时应该确保这个数组足够大,能容纳生成的输出数据,输出以空字符('\0')收尾。其余参数和printf相同。

返回值:

这三个函数都是已传送的字符数,sprintf输出的空字符不计入。

printf、fprintf写入时发生I/O错误,会返回一个负值。sprintf说是失败返回负值,网上没找到说怎么算失败的,还有待考证。

格式项:

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

格式码specifier:

%d, %i  十进制有符号整数
%u  十进制无符号整数
%f、%e、%g  浮点数
    %g  保留六位有效数字,去掉尾缀的零。打印那些不需要按列对齐的浮点数很有用。超过999999的数,会用科学计数法,且四舍五入,保留六位有效数字。(eg:打印123456789.0使用%g,得到1.23457e+08)比较小的数,指数小于等于才会用科学计数法。(eg:打印3.14159e-4 和 3.14159e-5,分别得到0.0003143159 和 3.14159e-5)
    %e  一律使用指数形式,保留小数点后六位有效数字。(eg:3.141593 得到 3.141593e+00)
    %f  与%e相反,不使用指数形式,保留小数点后六位有效数字。(eg:1e6 得到 1000000.000000)
%E、%G  与%e、%g相同,只不过用大写的E代替小写e。
%s  字符串
%c  单个字符
%p  指针的值
%x  无符号以小写字母十六进制表示的整数
%X  无符号以大写字母十六进制表示的整数
%o  无符号以八进制表示的整数
%%  打印字符'%'

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

宽度修饰符width:(eg:%2d)

固定长度的区间内打印数值,数据长度不够左侧补空格字符,长度超过了会适当调整区间长度。

如:

    for (int i = 8; i < 12; i++)
    {
        printf("|%2d| |%3d| |%4d|\n", i * 10, i * 100, i * 100);
    }

打印出来为

|80| |800| | 800|
|90| |900| | 900|
|100| |1000| |1000|
|110| |1100| |1100|

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

精度修饰符precision:(eg:%.2d)

指定打印数字位数,或者限制打印字符串中的字符数。

对整数格式%d、%o、%x、%u等,指定打印数字最少位数。如果数字少于这个位数,会在前面补上0。

printf("%.2d/%.2d", 7, 14);

将打印出

07/14

对于%e、%f等格式码,表示小数点后应该出现的数字位数。

对于%g格式码,指定打印的有效数字。

对于%s,表示打印的字符数。

对于%c和%%,被忽略。


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

标志位flags:+,-,0, , #

‘-’:显示方式改为左对齐,右端填充空白字符。和宽度修饰符一起用。

‘+’:数字输出必须带正负号。

‘ ’:空格字符。若非负,前面插入空格字符(与负数前面的负号大小相等),如果想要左对齐可以保证正负数能对齐。

‘#’:对数值输出格式微调。

与 o、x 或 X 说明符一起使用时,非零值前面会分别显示 0、0x 或 0X。

与 e、E 和 f 一起使用时,会强制输出包含一个小数点,即使后边没有数字时也会显示小数点。默认情况下,如果后边没有数字时候,不会显示显示小数点。

与 g 或 G 一起使用时,结果与使用 e 或 E 时相同,但是尾部的零不会被移除。

‘0’:在指定填充 padding 的数字左边放置零(0),而不是空格。


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

h  参数被解释为短整型或无符号短整型(仅适用于整数说明符:i、d、o、u、x 和 X)。
l  参数被解释为长整型或无符号长整型,适用于整数说明符(i、d、o、u、x 和 X)及说明符 c(表示一个宽字符)和 s(表示宽字符字符串)。

L  参数被解释为长双精度型(仅适用于浮点数说明符:e、E、f、g 和 G)。


可变宽度与精度:*

用*替换宽度修饰符或者精度修饰符,或者替换两者,可以间接指定宽度和精度。

如:

    int l = 10;
    int pri = 6;
    float a = 3.0;
    char name[] = "Hello";
    printf("|%*.*s| |%.*f|\n", l, pri, name, l, a);

输出为:

|     Hello| |3.0000000000|

参考:

1.《C陷阱与缺陷》

2.C 库函数 – sprintf()

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值