一、整数类型格式符
| 格式符 | 数据类型 | 说明 | 示例(变量值) | 输出 |
|---|
%d / %i | int | 有符号十进制整数 | int x = 123; | 123 |
%hd | short | 短整型有符号十进制 | short s = 5; | 5 |
%ld | long | 长整型有符号十进制 | long l = 123456L; | 123456 |
%lld | long long | 64位有符号十进制 | long long ll = 123456789LL; | 123456789 |
%u | unsigned int | 无符号十进制整数 | unsigned int u = 40000; | 40000 |
%lu | unsigned long | 无符号长整型十进制 | unsigned long ul = 400000UL; | 400000 |
%llu | unsigned long long | 无符号64位十进制 | unsigned long long ull = 123456789012ULL; | 123456789012 |
%o | 无符号整数 | 八进制(无前导0) | int x = 255; | 377 |
%#o | 无符号整数 | 八进制(带前导0) | int x = 255; | 0377 |
%x | 无符号整数 | 十六进制(小写字母) | int x = 255; | ff |
%X | 无符号整数 | 十六进制(大写字母) | int x = 255; | FF |
%#x | 无符号整数 | 十六进制(带 0x 前缀,小写) | int x = 255; | 0xff |
%#X | 无符号整数 | 十六进制(带 0X 前缀,大写) | int x = 255; | 0XFF |
%llx | unsigned long long | 64位十六进制(小写) | unsigned long long x = 0x123456789abcdefULL; | 123456789abcdef |
二、浮点数类型格式符
| 格式符 | 数据类型 | 说明 | 示例(变量值) | 输出 |
|---|
%f | double | 十进制小数形式,默认6位小数 | double d = 3.14159; | 3.141590 |
%.nf | double | 指定小数位数 n | d = 3.14159; printf("%.2f", d); | 3.14 |
%e / %E | double | 科学计数法(e 或 E) | d = 123.456; | 1.234560e+02 / 1.234560E+02 |
%g / %G | double | 自动选 %f 或 %e 中较短的 | d = 123.456; | 123.456 |
%a / %A | double | 十六进制浮点数(C99) | d = 3.14; | 0x1.91eb86p+1 / 0X1.91EB86P+1 |
三、字符与字符串格式符
| 格式符 | 数据类型 | 说明 | 示例(变量值) | 输出 |
|---|
%c | char | 单个字符 | char ch = 'A'; | A |
%C | wint_t | 宽字符(非ISO C标准,实际常用 %lc) | wchar_t wc = L'中'; | 中 |
%s | char* | 窄字符串(以 \0 结尾) | char str[] = "Hello"; | Hello |
%S | wchar_t* | 宽字符串(非ISO C标准,实际常用 %ls) | wchar_t ws[] = L"世界"; | 世界 |
四、其他格式符
| 格式符 | 数据类型 | 说明 | 示例 | 输出 |
|---|
%p | void* | 指针地址(十六进制) | int x=5; printf("%p", &x); | 0x7fff5fbff5c |
%% | 无 | 打印百分号本身 | printf("%%"); | % |
五、宽度与精度修饰符
| 修饰符 | 含义 | 示例 | 输出效果 |
|---|
%md | 输出占 m 列,右对齐,左补空格 | printf("%5d", 12); | 12 |
%-md | 左对齐,右补空格 | printf("%-5d", 12); | 12 |
%0md | 右对齐,左补0 | printf("%05d", 12); | 00012 |
%m.nf | 总宽度 m(含小数点),小数 n 位 | printf("%6.2f", 3.1); | 3.10 |
%*.*f | 宽度和精度由参数指定 | printf("%*.*f", 6, 2, 3.1); | 3.10 |
%h 前缀 | 修饰整型为 short | %hd, %hu | — |
%l 前缀 | 修饰整型为 long,浮点为 double | %ld, %lf(C99中 %lf 等同 %f) | — |
%ll 前缀 | 修饰整型为 long long | %lld, %llu | — |
说明
- 格式说明符结构:
%[标志][宽度][.精度][长度]类型
标志:-(左对齐)、+(显示正号)、空格、#(进制前缀)、0(零填充)
宽度:最小输出字符数
精度:对于 %f 表示小数位数;对于 %s 表示最大字符数
长度:h(short)、l(long)、ll(long long)、L(long double)
- C/C++ 标准差异:
%lf 在 C99 中与 %f 对 printf 无区别(因为 float 被提升为 double);%C 和 %S 并非标准 C,标准中应使用 %lc 和 %ls(需包含 <wchar.h>)。
- 可变宽度参数:
%*d 表示宽度由参数提供,如 printf("%*d", 5, 12); 输出 12。
对于m.n的格式还可以用如下方法表示:
char ch[20];
printf("%*.s\n",m,n,ch);
ASCII码
| ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 | |
|---|
| 0 | NUT(空字符) | 32 | (space) | 64 | @ | 96 | 、 | |
| 1 | SOH(标题开始) | 33 | ! | 65 | A | 97 | a | |
| 2 | STX(正文开始) | 34 | ” | 66 | 递推 | 98 | 递推 | |
| 3 | ETX(正文结束) | 35 | # | 67 | ~ | 99 | ~ | |
| 4 | EOT(传输结束) | 36 | $ | 68 | ~ | 100 | ~ | |
| 5 | ENQ(询问) | 37 | % | 69 | ~ | ~ | ~ | |
| 6 | ACK(收到通知) | 38 | & | 70 | ~ | ~ | ~ | |
| 7 | BEL(铃) | 39 | , | 71 | ~ | ~ | ~ | |
| 8 | BS(退格) | 40 | ( | ~ | ~ | ~ | ~ | |
| 9 | HT(水平制表符) | 41 | ) | ~ | ~ | ~ | ~ | |
| 10 | LF(换行键) | 42 | * | ~ | ~ | ~ | ~ | |
| 11 | VT(垂直制表符) | 43 | + | ~ | ~ | ~ | ~ | |
| 12 | FF(换页键) | 44 | , | ~ | ~ | ~ | ~ | |
| 13 | CR(回车键) | 45 | - | ~ | ~ | ~ | ~ | |
| 14 | SO(移出) | 46 | . | ~ | ~ | ~ | ~ | |
| 15 | SI(移入) | 47 | / | ~ | ~ | ~ | ~ | |
| 16 | | 48 | 0 | ~ | ~ | ~ | ~ | |
| 17 | | 49 | 1 | ~ | ~ | ~ | ~ | |
| 18 | CAN(取消) | 50 | 2 | ~ | ~ | ~ | ~ | |
| 19 | | 51 | 3 | ~ | ~ | ~ | ~ | |
| 20 | | 52 | 4 | ~ | ~ | ~ | ~ | |
| 21 | | 53 | 5 | ~ | ~ | ~ | ~ | |
| 22 | | 54 | 6 | ~ | ~ | ~ | ~ | |
| 23 | | 55 | 7 | ~ | ~ | ~ | ~ | |
| 24 | | 56 | 8 | ~ | ~ | ~ | ~ | |
| 25 | | 57 | 9 | ~ | ~ | ~ | ~ | |
| 26 | | 58 | : | 90 | Z | 122 | z | |
| 27 | | 59 | ; | 91 | [ | 123 | { | |
| 28 | | 60 | < | 92 | \ | 124 | ` | ` |
| 29 | | 61 | = | 93 | ] | 125 | } | |
| 30 | | 62 | > | 94 | ^ | 126 | ` | |
| 31 | | 63 | ? | 95 | _ | 127 | DEL | |