- printf函数称之为格式输出函数,方法名称的最后一个字母f表示format。其功能是按照用户指定的格式,把指定的数据输出到屏幕上
- printf函数的调用格式为:
printf("格式控制字符串",输出项列表 );
- 例如:
printf("a = %d, b = %d",a, b);
- 非格式字符串原样输出, 格式控制字符串会被输出项列表中的数据替换
- 注意: 格式控制字符串和输出项在数量和类型上必须一一对应
- 格式控制字符串
- 形式:
%[标志][输出宽度][.精度][长度]类型
- 类型
- 格式:
printf("a = %类型", a);
- 类型字符串用以表示输出数据的类型, 其格式符和意义如下所示
类型 | 含义 |
---|
d | 有符号10进制整型 |
i | 有符号10进制整型 |
u | 无符号10进制整型 |
o | 无符号8进制整型 |
x | 无符号16进制整型 |
X | 无符号16进制整型 |
f | 单、双精度浮点数(默认保留6位小数) |
e / E | 以指数形式输出单、双精度浮点数 |
g / G | 以最短输出宽度,输出单、双精度浮点数 |
c | 字符 |
s | 字符串 |
p | 地址 |
#include <stdio.h>
int main(){
int a = 10;
int b = -10;
float c = 6.6f;
double d = 3.1415926;
double e = 10.10;
char f = 'a';
printf("a = %d\n", a);
printf("a = %i\n", a);
printf("a = %u\n", a);
printf("b = %u\n", b);
printf("a = %o\n", a);
printf("b = %o\n", b);
printf("a = %x\n", a);
printf("b = %x\n", b);
printf("a = %X\n", a);
printf("b = %X\n", b);
printf("c = %f\n", c);
printf("d = %lf\n", d);
printf("e = %e\n", e);
printf("e = %E\n", e);
printf("e = %g\n", e);
printf("e = %G\n", e);
printf("f = %c\n", f);
}
- 宽度
- 格式:
printf("a = %[宽度]类型", a);
- 用十进制整数来指定输出的宽度, 如果实际位数多于指定宽度,则按照实际位数输出, 如果实际位数少于指定宽度则以空格补位
#include <stdio.h>
int main(){
int a = 1;
printf("a =|%d|\n", a);
printf("a =|%5d|\n", a);
int b = 1234567;
printf("b =|%d|\n", b);
printf("b =|%5d|\n", b);
}
- 标志
- 格式:
printf("a = %[标志][宽度]类型", a);
标志 | 含义 |
---|
- | 左对齐, 默认右对齐 |
+ | 当输出值为正数时,在输出值前面加上一个+号, 默认不显示 |
0 | 右对齐时, 用0填充宽度.(默认用空格填充) |
空格 | 输出值为正数时,在输出值前面加上空格, 为负数时加上负号 |
# | 对c、s、d、u类型无影响 |
# | 对o类型, 在输出时加前缀o |
# | 对x类型,在输出时加前缀0x |
#include <stdio.h>
int main(){
int a = 1;
int b = -1;
printf("a =|%d|\n", a);
printf("a =|%5d|\n", a);
printf("a =|%-5d|\n", a);
printf("a =|%d|\n", a);
printf("a =|%+d|\n", a);
printf("b =|%d|\n", b);
printf("b =|%+d|\n", b);
printf("a =|%5d|\n", a);
printf("a =|%05d|\n", a);
printf("a =|% d|\n", a);
printf("b =|% d|\n", b);
int c = 10;
printf("c = %o\n", c);
printf("c = %#o\n", c);
printf("c = %x\n", c);
printf("c = %#x\n", c);
}
- 精度
- 格式:
printf("a = %[精度]类型", a);
- 精度格式符以"."开头, 后面跟上十进制整数, 用于指定需要输出多少位小数, 如果输出位数大于指定的精度, 则删除超出的部分
#include <stdio.h>
int main(){
double a = 3.1415926;
printf("a = %.2f\n", a);
}
- 动态指定保留小数位数
- 格式:
printf("a = %.*f", a);
#include <stdio.h>
int main(){
double a = 3.1415926;
printf("a = %.*f", 2, a);
}
- 实型(浮点类型)有效位数问题
- 对于单精度数,使用%f格式符输出时,仅前6~7位是有效数字
- 对于双精度数,使用%lf格式符输出时,前15~16位是有效数字
- 有效位数和精度(保留多少位)不同, 有效位数是指从第一个非零数字开始,误差不超过本数位半个单位的、精确可信的数位
- 有效位数包含小数点前的非零数位
#include <stdio.h>
int main(){
float a = 1234.567890123456789;
double b = 1234.567890123456789;
printf("a = %.15f\n", a);
printf("b = %.15f\n", b);
}
- 长度
- 格式:
printf("a = %[长度]类型", a);
长度 | 修饰类型 | 含义 |
---|
hh | d、i、o、u、x | 输出char |
h | d、i、o、u、x | 输出 short int |
l | d、i、o、u、x | 输出 long int |
ll | d、i、o、u、x | 输出 long long int |
#include <stdio.h>
int main(){
char a = 'a';
short int b = 123;
int c = 123;
long int d = 123;
long long int e = 123;
printf("a = %hhd\n", a);
printf("b = %hd\n", b);
printf("c = %d\n", c);
printf("d = %ld\n", d);
printf("e = %lld\n", e);
}
- 转义字符
- 格式:
printf("%f%%", 3.1415);
- %号在格式控制字符串中有特殊含义, 所以想输出%必须添加一个转移字符
#include <stdio.h>
int main(){
printf("%f%%", 3.1415);
}