C的printf函数总结

222 阅读2分钟

基本格式:
printf( 格式字符串, 待打印项1, 待打印项2,...);

比较难搞的点:

  • 转换说明修饰符

image.png

演示实例1

int main()
{
    char ch = 'A';
    char str[20] = "www.runoob.com";
    float flt = 10.234;
    int no = 150;
    double dbl = 20.123456;
    printf("字符为 %c \n", ch);
    printf("字符串为 %s \n", str);
    printf("浮点数为 %f \n", flt);
    printf("整数为 %d\n", no);
    printf("双精度值为 %lf \n", dbl);
    printf("八进制值为 %o \n", no);
    printf("十六进制值为 %x \n", no);

    return 0;
} 

image.png

  • 标记说明

image.png

  • 转换符

image.png

演示实例2

#define PAGES 959
int main()
{
    printf("*%d*\n", PAGES);
    printf("*%2d*\n", PAGES);
    printf("*%10d*\n", PAGES);
    printf("*%-10d*\n", PAGES);

    return 0;
}

执行结果:

image.png

  • 第一个不带任何修饰符,对应的结果和带整数字段的宽度的转换说明相同
  • 第二个宽度是2,该字段长度是3会自动扩展到3
  • 第三个宽度是10个,所以两个 * 之间就会多了7个空格
  • 第四个是多了 - 待打印项左对齐

演示实例3

int main()
{
    const double RENT = 3852.99;

    printf("*%f*\n", RENT);
    printf("*%e*\n", RENT);
    printf("*%4.2f*\n", RENT);
    printf("*%3.1f*\n", RENT);
    printf("*%10.3f*\n", RENT);
    printf("*%10.3E*\n", RENT);
    printf("*%10.3E*\n", RENT);
    printf("*%+4.2f*\n", RENT);
    printf("*%010.2f*\n", RENT);

    return 0;
}

执行结果

image.png

  • 第一个转换,字段宽度和小数点后面的位数均为系统默认设置,即字段宽度是容纳待打印数字所需的位数和小数点后打印6位数字。
  • 第2个转换说明是%e。默认情况下,编译器在小数点的左侧打印1个数字,在小数点的右侧打印6个数字。这样打印的数字太多!解决方案是指定小数点右侧显示的位数,程序中接下来的4个例子就是这样做的。请注意,第4个和第6个例子对输出结果进行了四舍五入。另外,第6个例子用E代替了e。
  • 第8个转换说明中包含了+标记,这使得打印的值前面多了一个代数符号(+)。0标记使得打印的值前面以0填充以满足字段要求。
  • 转换说明%010.2f的第1个0【对于数值,用前导0代替空格,填充字段宽度】是标记,句点(.)之前、标记之后的数字是指定的字段宽度。

%010.2f感觉这个还挺难懂的,再做几个练习

int main()
{
    const double RENT = 3852.99;

    printf("*%09.2f*\n", RENT);

    return 0;
}

执行结果: image.png