在 C 语言中,我们可以使用 printf() 函数来输出一个内容。printf(),是 “print format(格式化输出)” 的缩写。
语法:
printf(格式, 变量)
printf(字符串)说明:
如果想要在一个 C 程序中使用 printf() 函数,我们就必须使用 #include 命令来引入 <stdio.h> 这个头文件。也就是说,#include <stdio.h> 这一句代码的目的就是为了让我们在一个 C 程序中使用 printf() 函数,当然也包括下一节介绍的 scanf() 函数。
C 格式化输出
下面将会介绍如何使用 printf() 函数进行各种输出,包括输出一个变量、输出多个变量、格式化输出等。
1. C 输出一个变量
在 C 语言中,我们可以使用 printf(格式,变量)这种方式来进行格式化输出。所谓的格式化输出,指的是以某种格式来输出一个变量。格式化输出是最常见的一种输出方式。
示例 1:printf() 输出一个变量
#include <stdio.h>
int main(void)
{
int a = 10;
int b = 20;
int sum = a + b;
printf("%d", sum);
return 0;
}运行结果如下。
30分析:
上面这个例子非常简单,其实就是计算 a + b 的结果,然后再使用 printf() 输出出来。实际上,除了 “printf(格式,变量)” 这种方式,我们还可以使用 “printf(格式,表达式)” 这种方式。对于上面例子来说,下面 2 种方式是等价的。
// 方式 1
int sum = a + b;
printf("%d", sum);
// 方式 2
printf("%d", a + b);如果希望显示的结果是 “a + b = 30”,而不仅仅是 “30” 一个数字,此时又应该怎么做呢?我们可以看一下下面这个例子。
示例 2:输出时加上提示字符
#include <stdio.h>
int main(void)
{
int a = 10;
int b = 20;
int sum = a + b;
printf("a + b = %d", sum);
return 0;
}运行结果如下。
a + b = 30分析:
printf("a + b = %d", sum); 这一句代码其实非常简单,它有 2 个参数:第 1 个参数是 “a + b = %d”,第 2 个参数是 sum。然后 printf() 会将这2个参数组合在一起。怎么组合呢?也就是将 “a + b = %d” 中 “%d” 替换成 “sum 的值”。注意是替换成 “sum 的值”,而不是替换成 “sum”。因此输出结果就是:a + b = 30。

示例 3:输出格式不一致
#include <stdio.h>
int main(void)
{
int a = 2025;
printf("%f", a);
return 0;
}运行代码如下。
0.000000分析:
在这个例子中,a 是 int 类型。但是在使用 printf() 输出 a 时,我们并没有使用 “%d” 格式,而是使用了 “%f” 格式,此时输出结果就会跟预期结果不一样。
所以在实际开发中,对于 printf() 的输出,我们一定要保证前后的格式一致,否则就可能会导致输出结果有问题。
2. C 输出多个变量
有小伙伴就会问了,printf() 函数能不能同时输出多个变量或多个值呢?答案是肯定的,请看下面例子。
示例 4:printf() 输出多个变量
#include <stdio.h>
int main(void)
{
int a = 10;
int b = 20;
int sum = a + b;
printf("%d + %d = %d", a, b, sum);
return 0;
}运行结果如下。
10 + 20 = 30分析:
在这个例子中,printf() 函数输出了 a、b、sum 这 3 个整型变量。既然有 3 个整型变量,那么前面的“格式”就需要有 3 个 “%d” 才行。实际上,像 %d、%f、%c 这些又叫做“格式符”,我们在下一节会详细介绍。
printf("%d + %d = %d", a, b, sum); 会将所有参数进行组合,不过会严格按照顺序组合,比如 a 对应第 1个 %d,b 对应第 2 个 %d,sum 就是对应第 3 个 %d,如下图所示。

上面这种组合字符串的方式非常有用,在实际开发中我们会大量用到,小伙伴们要认真掌握一下。
示例 5:输出多个变量
#include <stdio.h>
int main(void)
{
int a = 10;
int b = 20;
int c = 30;
printf("%d\n%d\n%d", a, b, c);
return 0;
}运行结果如下。
10
20
30分析:
对于C 语言输出多个变量或多个值,我们需要注意以下 2 点。
- 每一个变量都要有一个格式符。就多少个变量,就应该要有多少个格式符。
- 每一个格式符要和对应位置变量的类型相吻合。
3. 输出时控制小数位数
在 C 语言中,我们在使用 printf() 输出浮点数时,还可以控制小数的位数。
语法:
printf("%0.nf", 变量);说明:
n 是一个整数,表示只输出 n 位小数。默认情况下,“%f” 格式的小数是 6 位。
示例 6:输出控制小数位数
#include <stdio.h>
int main(void)
{
float a = 3.1415926;
printf("%0.1f\n", a);
printf("%0.2f\n", a);
printf("%0.3f", a);
return 0;
}运行结果如下。
3.1
3.14
3.142分析:
需要注意的是,当使用 %f 控制小数位数时,printf 会进行四舍五入,这与我们在 “C 类型转换” 一节中讲的直接截断(舍去小数)是不一样的。
4. 输出时控制宽度
使用 C 语言 printf() 函数输出时,我们还可以定义输出数据的宽度。控制宽度有时非常有用,它可以让输出结果看起来更加直观明了。
语法:
printf("%md", 整型);
printf("%m.nf", 浮点型);说明:
m 是一个整数,表示输出结果占据多少个数字的宽度。对于浮点型数据来说,“%m.nf” 中的 m 表示控制宽度,n 表示保留小数的位数。
示例 7:输出时控制宽度
#include <stdio.h>
int main(void)
{
printf("%4d%4d%4d%4d", 64, 36, 12, 20);
return 0;
}运行结果如下。
64 36 12 20分析:
“%4d” 表示该数据占据了 4 个数字的位置,如果自身不满 4 位数,那么就在前面补空格。这种方式可以快速地把多个数以空格方式隔开,从而让我们的输出结果更加一目了然。
对于上面这个例子来说,下面 2 种方式是等价的,只不过方式 1 更加的简单。
// 方式 1
printf("%4d%4d%4d%4d\n", 64, 36, 12, 20);
// 方式 2
printf(" %d %d %d %d", 64, 36, 12, 20);5. 输出时对齐方式
使用 printf() 函数输出并且给定一个宽度时,默认情况下是右对齐的方式。实际上我们还可以设置左对齐方式。
语法:
printf("%-md", 整型);
printf("%-m.nf", 浮点型);说明:
设置左对齐很简单,只需要在 “%” 后面加上一个 “-” 就可以了。
示例 8:输出时右对齐(默认情况)
#include <stdio.h>
int main(void)
{
printf("%4d%4d%4d%4d\n", 1, 2, 3, 4);
printf("%4d%4d%4d%4d\n", 11, 12, 13, 14);
printf("%4d%4d%4d%4d\n", 6, 7, 8, 9);
printf("%4d%4d%4d%4d", 16, 17, 18, 19);
return 0;
}运行结果如下。
1 2 3 4
11 12 13 14
6 7 8 9
16 17 18 19示例 9:输出时左对齐
#include <stdio.h>
int main(void)
{
printf("%-4d%-4d%-4d%-4d\n", 1, 2, 3, 4);
printf("%-4d%-4d%-4d%-4d \n", 11, 12, 13, 14);
printf("%-4d%-4d%-4d%-4d \n", 6, 7, 8, 9);
printf("%-4d%-4d%-4d%-4d ", 16, 17, 18, 19);
return 0;
}运行结果如下。
1 2 3 4
11 12 13 14
6 7 8 9
16 17 18 19C 输出字符串
在 C 语言中,我们可以使用 printf(字符串)这种方式来直接输出一个字符串。所谓的字符串,指的是一串字符。对于字符串来说,我们必须使用英文双引号括起来(不能使用英文单引号)。
提示: 除了 printf() 函数,我们还可以使用 puts() 函数来输出字符串。puts() 函数是 C 语言专门用于输出字符串的函数,它的作用是将指定的字符串输出到标准输出,并在末尾自动添加一个换行符。
示例 10:printf() 输出字符串
#include <stdio.h>
int main(void)
{
printf("绿叶网");
return 0;
}运行结果如下。
绿叶网分析:
如果你使用的开发工具是 VSCode,默认情况下使用 printf() 输出中文是会产生乱码的。对于如何解决中文乱码问题,请查阅 “VSCode 配置 C 开发环境” 这一节的末尾。
到这里小伙伴就会问了,我们能不能直接使用 printf() 输出一个整数、浮点数或字符呢?其实是不可以的,大家可以看一下下面这个例子。
示例 11:printf() 无法直接输出整数
#include <stdio.h>
int main(void)
{
printf(2025);
return 0;
}分析:
当编译上面代码时,VSCode 终端窗口会直接报错。为什么会报错呢?这是因为 printf() 的输出内容必须是一个字符串。如果想要输出一个整数,我们需要这样来写:printf("%d", 2025);。
printf("%d", 2025) 最终输出的本质上是一个字符串 "2025",而不是一个整数 2025。"%d" 其实就是将 2025 替换双引号里面的 %d,最终还是一个字符串。所以小伙伴们一定要记住这么一点:printf() 函数必须输出的是一个字符串,而不能是其他类型。
字符串指的是一串字符,它跟之前介绍的字符(即 char 类型)是不一样的。字符串 本身比较复杂,这里只需要简单了解一下即可,后面我们会花整一章来详细介绍。
C 输出字符
在 C 语言中,我们可以使用 putchar() 函数来快速输出一个字符。putchar() 是 printf()的一种简写方式。
语法:
putchar(字符);说明:
putchar() 函数接收一个字符作为参数,然后将该字符输出到标准输出(通常是屏幕)。
示例 12:putchar() 输出字符
#include <stdio.h>
int main(void)
{
char a = 'A';
putchar(a);
return 0;
}运行结果如下。
A分析:
putchar() 本质上是 printf() 的一种简写方式,下面 2 种方式效果是相同的。
// 方式 1
putchar(a);
// 方式 2
printf("%c", a);需要注意的是,putchar() 函数一次只能输出一个字符。如果想要输出多个字符,需要多次调用 putchar() 函数。
示例 13:输出字符时换行
#include <stdio.h>
int main(void)
{
char a = 'A';
char b = 'B';
putchar(a);
putchar(b);
return 0;
}运行结果如下。
AB分析:
由于 putchar() 只能输出一个字符,它本身并不会换行。如果想要在多个输出时进行换行,我们可以使用 putchar('\n'),也可以使用 printf() 来代替。至于使用哪一种,就看自己选择了。
对于这个例子来说,下面 2 种方式效果是相同的。
// 方式 1
putchar(a);
putchar('\n');
putchar(b);
// 方式 2
printf("%c\n", a);
printf("%c", b);提示: C 语言共有 3 个常用的输出函数:printf()、putchar()、puts()。对于 getchar() 和 gets(),我们在后续章节会详细介绍。
