开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 22 天,点击查看活动详情
printf()
简介:
printf()函数是在<stdio.h>中声明的一个函数,使用前必须加入对应的头文件<stdio.h>,使用该函数可以向标准输出设备(如屏幕)输出数据。
printf(字符串)
首先,该函数最简单的用法就是输出字符串。
比如:
printf("Hello World!");
运行结果为:
Hello World!
printf(格式化字符串, 参数列表)
在 printf() 函数中,第一个参数就是格式化字符串,用于告诉计算机该如何输出,按照该字符串的需求,进行格式化输出。
比如:
printf("My age is %d.", 21);
运行结果为:
My age is 21.
可以看到,占位符 %d 表示以有符号的十进制形式输出一个整型值,此时参数列表中的 21 会代替 %d 的位置。
注意,占位符的格式可以有多个,比如:
printf("a-->%d, b-->%d", 100, 999);
运行结果为:
a-->100, b-->999
现在记录常用的占位符:
%d:以带符号的十进制形式输出整数(但正数不输出正号+)%o:以不带符号的八进制形式输出整数%x:以不带符号的十六进制形式输出整数%u:以不带符号的十进制形式输出整数%c:输出一个字符%s:输出一个或多个字符%s:输出一个或多个字符(即字符串)%f:以小数形式输出单、双精度数,默认输出6位小数%e:以标准指数形式输出单精度、双精度数,数字部分小数位数为 6 位%lu:32位无符号整数%llu:64位无符号整数
需要注意,在
printf(格式化字符串, 参数列表)中,格式化字符串中的占位符个数必须和参数列表中参数的个数一致。
下面举一个例子:
for(int ch = 65; ch <= 90; ch++) {
printf("ASCII: %d, 字符: %c\n", ch, ch);
}
运行结果为:
ASCII: 65, 字符: A
ASCII: 66, 字符: B
ASCII: 67, 字符: C
ASCII: 68, 字符: D
ASCII: 69, 字符: E
ASCII: 70, 字符: F
ASCII: 71, 字符: G
ASCII: 72, 字符: H
ASCII: 73, 字符: I
ASCII: 74, 字符: J
ASCII: 75, 字符: K
ASCII: 76, 字符: L
ASCII: 77, 字符: M
ASCII: 78, 字符: N
ASCII: 79, 字符: O
ASCII: 80, 字符: P
ASCII: 81, 字符: Q
ASCII: 82, 字符: R
ASCII: 83, 字符: S
ASCII: 84, 字符: T
ASCII: 85, 字符: U
ASCII: 86, 字符: V
ASCII: 87, 字符: W
ASCII: 88, 字符: X
ASCII: 89, 字符: Y
ASCII: 90, 字符: Z
再举一个例子:
#include <stdio.h>
int main()
{
int v = 100;
printf("整数: %d\n" , v);
printf("八进制值: %o\n", v);
printf("十六进制值: %x\n", v);
double fv = 123.456;
printf("浮点数: %f \n", fv);
char ch = 'A';
printf("字符: %c\n", ch);
char str[20] = "Hello World.";
printf("字符串: %s\n" , str);
return 0;
}
运行结果为:
整数: 100
八进制值: 144
十六进制值: 64
浮点数: 123.456000
字符: A
字符串: Hello World.
进一步控制格式输出
输出的宽度
我们先来看一下默认的阵型变量的输出:
printf("My age is %d.", 21);
运行结果为:
My age is 21.
现在,我们尝试把 %d 改为 %10d:
printf("My age is %10d.", 21);
运行结果为:
My age is 21.
可以看到,"is" 和 21 的距离被拉开了。这是因为这里的 10 表示我们要输出的值的字符最小数目。因为"21" 的长度为2,而指定的字符输出数为10,那么多出的宽度就由空格来填补。也就是说,如果输出的值短于该数,结果会被空格填充。
当然,如果实际要输出的值,其长度要长于我们指定的宽度,该值输出时并不会被截断。比如:
printf("The price is %5d.", 123456);
运行结果为:
The price is 123456.
另外,我们来看这种情况:
printf("My age is %-10d.", 21);
运行结果为:
My age is 21 .
可以看到,如果我们将 %10d 改为 %-10d,那么此时多出的宽度会同样以空格的形式,填补在右边而不是左边了。
输出的小数位数
我们先来看一下默认的浮点数输出:
double n = 100;
printf("%f", n/3);
运行结果为:
33.333333
可以看到,默认是输出 6 位小数。
如果只想输出2位小数,那么可以将 %f 改为 %.2f。比如:
double n = 100;
printf("%.2f", n/3);
运行结果为:
33.33
注意,我们可以同时输出宽度和小数位数的。比如
%5.2f表示输出宽度为 5,并保留 2 位小数。