C语言的输出函数printf()

发布时间:2024年01月15日

1.printf()标准格式

printf(格式控制字符串,输出列表);

其中,

  • "格式控制字符串"是用双引号括起来的一个字符串。包括:

    • 普通字符:普通字符即需要在输出时原样输出的字符。

    • 占位符:由“%”和格式字符组成。这个位置可以用其它值代入

  • "输出列表"是程序需要输出的一些数据,可以是常量、变量或表达式。用于替换占位符的位置

注意:printf() 参数与占位符是一一对应关系。如果参数个数少于对应的占位符, printf() 可能会输出内存中的任意值。

2.占位符

????????占位符的第一个字符是 % ,第二个字符表示占位符的类型。占位符有许多种类,与 C 语言的数据类型相对应。

????????下面按照字母顺序,列出占位符如下,方便查阅(红色为常用的):

  • %a :浮点数(仅C99有效)
  • %A :浮点数(仅C99有效)
  • %c :char型数据
  • %d :十进制整数(int)
  • %e :使用科学计数法的浮点数,指数部分的 e 为小写
  • %E :使用科学计数法的浮点数,指数部分的 E 为大写
  • %i :整数,基本等同于 %d (几乎不用,使用%d就足够了)
  • %f :浮点数(float)
  • %g :6个有效数字的浮点数。整数部分一旦超过6位,就会自动转为科学计数法,指数部分的 e 为小写
  • %G :等同于 %g ,唯一的区别是指数部分的 E 为大写
  • %hd :十进制 short int 类型
  • %ho :八进制 short int 类型
  • %hx :十六进制 short int 类型
  • %hu :unsigned short int 类型
  • %ld :十进制整数(long)
  • %lo :八进制 long int 类型
  • %lx :十六进制 long int 类型
  • %lu :unsigned long int 类型
  • %lld :十进制 long long int 类型
  • %llo :八进制 long long int 类型
  • %llx :十六进制 long long int 类型
  • %llu :unsigned long long int 类型
  • %le :科学计数法表示的 long double 类型浮点数
  • %lf :十进制浮点数(double)
  • %n :已输出的字符串数量。该占位符本身不输出,只将值存储在指定变量之中
  • %o :八进制整数
  • %p :指针
  • %s :字符串
  • %u :十进制无符号整数(unsigned int)
  • %x :十六进制整数
  • %zd : size_t 类型
  • %% :输出一个百分号

3.输出格式

Ⅰ.限定宽度

????????限定占位符的最小宽度。

printf("%5d\n", 123); // 输出为 "  123" 

????????说明:%5d 表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。

????????输出的值默认是右对齐,即输出内容前面会有空格;如果希望改成左对齐,在输出内容后面添加空格,可以在占位符的 % 的后面插入一个 - 号

printf("%-5d\n", 123); // 输出为 "123  "

????????对于小数,这个限定符会限制所有数字的最小显示宽度

printf("%12f\n", 123.45); // 输出 "  123.450000"

????????%12f 表示输出的浮点数最少要占据12位。由于小数的默认显示精度是小数点后6位,所以123.45 输出结果的头部会添加2个空格。

Ⅱ.显示正负号

????????默认printf() 不对正数显示 + 号,只对负数显示 - 号。如果想让正数也输出 + 号,可以在占位符的 % 后面加一个 + 。

printf("%+d\n", 11); // 输出 +11
printf("%+d\n", -11); // 输出 -11

Ⅲ.限定小数位数

????????输出小数时,有时希望限定小数的位数。举例来说,希望小数点后面只保留两位,占位符可以写成 %.2f 。

?printf("Number is %.2f\n", 0.8); // 输出 Number is 0.80

????????这种写法可以与限定宽度占位符,结合使用。

?printf("%6.2f\n", 0.8); // 输出为 "  0.80"

????????说明:%6.2f 表示输出字符串最小宽度为6,小数位数为2。整体长度不足 6 位时,右对齐显示。

????????最小宽度和小数位数这两个限定值,都可以用 * 代替,通过 printf() 的参数传入。

printf("%*.*f\n", 6, 2, 0.8);
?//等同于
printf("%6.2f\n", 0.8);

拓展:

float f = 3.123456789f; // 单精度浮点数
double d = 3.123456789; // 双精度浮点数

printf("i am float = %.9f\n",f);    // 输出结果:i am float = 3.123456717
printf("i am double = %.9lf\n",d);  // 输出结果:i am double = 3.123456789

我们可以发现,float只有小数点后7位的精度

文章来源:https://blog.csdn.net/lemonzjk/article/details/135608271
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。