printf()用法——修饰符和标记

77 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情

举一个的例子(字段宽度在打印整数时的效果)

#include <stdio.h>
#define PAGES 959
int main(){
    printf("*%d*\n",PAGES );
    printf("*%2d*\n",PAGES );
    printf("*%10d*\n",PAGES );
    printf("*%-10d*\n",PAGES );
    return 0;
}

运行结果

Snipaste_2022-08-07_11-02-50.png

转换说明

  • 第一个转换说明没有修饰符,其对应的输入结果与带整数字段宽度的转换说明的输入结果相同。在默认情况下,没有任何修饰符的转换说明,直接打印。
  • 第二个转换说明是%2d,对应的输出结果应该是2字段宽度,因为待打印的整数有3位数字,所以字段宽度自动扩大来符合整数的长度。
  • 第三个转换说明是%10d,其对应的输出结果有10个空格宽度,所以两个星号之间有7个空格和3位数字,并且数字位于字段右侧。
  • 最后一个转换说明是%-10d,其对应的输出结果同样是10个空格宽度,负号(-)标记说明打印的数字位于字段的左侧。

举一个浮点型格式的例子

#include <stdio.h>
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("*%+4.2f*\n",RENT );
    printf("*%010.2f*\n",RENT );
    return 0;
}

运行结果

Snipaste_2022-08-07_11-22-37.png

这里使用了const关键字,限定变量为只读。

转换说明解释

  • 第一个转换说明是%f。在这种情况下,字段宽度和小数点后面的位数是系统默认设置,即字段宽度是容纳待打印数字所需的位数和小数点后打印6位数字。
  • 第二个转换说明%e,默认情况下,编译器在小数点的左侧打印1个数字,在小数点的右侧打印6个数字。这样太多了,所以规定小数点右侧显示位数(指的是转换说明)。
  • 第3456个例子就是规定小数点右侧显示位数(转换说明)。第4个和第6个进行了四舍五入,第六个E用e来代替。
  • 第7个转换说明包含了+标记,这使得打印的值前面多一个+符号。0标记使得打印的值前面的0填充来满足要求。注意,转换说明%012.2f的第1个0是标记,(.)之前,标记以后的数字是指定的字段宽度。