#C 语言显示输出
在学习 C 语言时,最常用的函数就是标准库函数 printf,它用于将字符串打印到标准输出上,通常也就是在命令行上进行显示。
int printf(const char* restrict format, ...);
标准库函数 printf 的第一个参数是一个 格式化字符串,其中以 %
开头的子串是格式化占位符;
之后可以携带任意数量的参数,这些参数按顺序根据格式化占位符进行打印。
例如:
%%
表示打印百分号(%
)本身%d
表示打印int
%u
表示打印unsigned int
%f
表示打印double
%c
表示打印char
例如:
#include <stdio.h>
int main(void)
{
printf("Hello, World!\n"); // 打印 Hello, World!
printf("100%%\n"); // 打印 100%
int x = 10;
printf("x 的值是 %d\n", x); // 打印整数 x,其中 %d 是占位符,表示整数
float y = 3.14;
printf("y 的值是 %f\n", y); // 打印小数 y,其中 %f 是占位符,表示浮点数
char ch = '@';
printf("ch 的值是 %c\n", ch); // 打印字符 ch,其中 %c 是占位符,表示字符
printf("x, y, ch 分别是 %d %f %c\n", x, y, ch); // 按顺序打印多个变量
return 0;
}
说明:
- 通过
%%
打印百分号(%
)本身 - 通过
%d
打印整数 - 通过
%f
打印浮点数 - 通过
%c
打印单个字符 \n
是 转义字符,表示换行。
运行结果:
Hello, World! 100% x 的值是 10 y 的值是 3.140000 ch 的值是 @ x, y, ch 分别是 10 3.140000 @
#转义字符
转义字符用于表示一些无法直接表示的字符,例如 \n
表示换行,以下是转义字符表:
转义字符 | 名称说明 | ASCII 值(十进制) | 说明举例 |
---|---|---|---|
\\ | 反斜杠 | 92 | 表示 \ 字符本身 |
\' | 单引号 | 39 | 表示 ' 字符本身,而非语法的一部分 |
\" | 双引号 | 34 | 表示 " 字符本身,而非语法的一部分 |
\n | 换行符(Line Feed) | 10 | 输出换行,UNIX 系统行结束符 |
\r | 回车符(Carriage Return) | 13 | Windows 系统行结束中的一部分 |
\t | 水平制表符(Tab) | 9 | 插入一个 tab 间隔 |
\v | 垂直制表符 | 11 | 少用,控制打印机换行 |
\b | 退格(Backspace) | 8 | 删除上一个字符(视终端而定) |
\a | 响铃(Alert) | 7 | 终端响铃或提示音 |
\f | 换页符(Form Feed) | 12 | 少用,用于分页打印机 |
\? | 问号(避免 ?? 被解释) | 63 | 预处理器中防止三字母替换 |
\0 | 空字符(Null) | 0 | 字符串结尾标志 |
\nnn | 八进制字符 | 0~255 | 如 \141 为 'a' |
\xhh | 十六进制字符 | 0~255 | 如 \x61 为 'a' |
#指定宽度
在格式化占位符中,可以指定打印的宽度,以实现对齐。例如 %5d
表示打印整数时如果宽度不足 5 个字符,则在左侧补充空格。
示例:
#include <stdio.h>
int main(void)
{
int x = 233;
printf("x 的值是 '%5d'\n", x); // x 本身宽度是 3,左侧补空格
int y = 9999;
printf("y 的值是 '%5d'\n", y); // y 本身宽度是 4,左侧补空格
int z = 66666666;
printf("z 的值是 '%5d'\n", z); // z 本身宽度超过了 5,忽略宽度正常打印
return 0;
}
说明:
- 通过
%5d
指定宽度为 5 - 宽度不足 5 时,在左侧用空格补全
- 宽度超过 5 时,忽略设置的宽度,正常打印
运行结果:
x 的值是 ' 233' y 的值是 ' 9999' z 的值是 '66666666'
#补零
默认情况下,宽度不足时使用空格补足。可以在格式占位符中添加一个 0 使其采用 0 补足。例如 %05d
表示宽度为 5,不足时补零。
示例:
#include <stdio.h>
int main(void)
{
int x = 233;
printf("x 的值是 '%05d'\n", x); // x 本身宽度是 3,左侧补零
int y = 9999;
printf("y 的值是 '%05d'\n", y); // y 本身宽度是 4,左侧补零
int z = 66666666;
printf("z 的值是 '%05d'\n", z); // z 本身宽度超过了 5,忽略宽度正常打印
return 0;
}
说明:
- 通过
%05d
指定宽度为 5,用 0 补全 - 宽度不足 5 时,在左侧用 0 补全
- 宽度超过 5 时,忽略设置的宽度,正常打印
运行结果:
x 的值是 '00233' y 的值是 '09999' z 的值是 '66666666'
#左对齐
在设置宽度后,默认是右对齐的,会在左侧添加空格。可以在格式占位符中添加一个负号(-
)使其采用左对齐。例如 %-5d
表示宽度为 5 并且左对齐。
示例:
#include <stdio.h>
int main(void)
{
int x = 233;
printf("x 的值是 '%-5d'\n", x); // x 本身宽度是 3,左对齐右侧补空格
int y = 9999;
printf("y 的值是 '%-5d'\n", y); // y 本身宽度是 4,左对齐右侧补空格
int z = 66666666;
printf("z 的值是 '%-5d'\n", z); // z 本身宽度超过了 5,忽略宽度正常打印
return 0;
}
说明:
- 通过
%-5d
指定宽度为 5,左对齐 - 宽度不足 5 时,在右侧用空格补全
- 宽度超过 5 时,忽略设置的宽度,正常打印
运行结果:
x 的值是 '233 ' y 的值是 '9999 ' z 的值是 '66666666'
#指定小数位数
在格式化占位符中,可以指定打小数的位数。例如 %.2f
表示显示两位小数。
示例:
#include <stdio.h>
int main(void)
{
double pi = 3.1415926;
printf("pi 的值是 '%5.2f'\n", pi); // 总宽度为 5,显示两位小数,左侧补空格
return 0;
}
说明:
- 通过
%05d
指定宽度为 5,小数点后显示 2 位 - 宽度不足 5 时,在左侧用空格补全
- 宽度超过 5 时,忽略设置的宽度,正常打印
运行结果:
pi 的值是 ' 3.14'
#十六进制和八进制
计算机使用二进制操作数据,因此在进行接近硬件底层的开发时常常使用便于与二进制进行互相转换的十六进制和八进制。
标准库函数 printf 可以使用以下格式进行十六进制和八进制的显示:
%x
显示为十六进制,无前缀%o
显示为八进制,无前缀%#x
显示为十六进制,有0x
前缀%#o
显示为八进制,有0
前缀
#include <stdio.h>
int main(void)
{
unsigned int x = 1024;
printf("x 十进制为 %d, 十六进制为 %#x, 八进制为 %#o\n", x, x, x);
return 0;
}
说明:
- 通过
%d
,%#x
和%#o
分别打印变量x
的十进制,十六进制和八进制形式
运行结果:
x 十进制为 1024, 十六进制为 0x400, 八进制为 02000