文章目录
printf()函数
转换说明
printf()函数打印数据的指令要与待打印数据类型相匹配
转换说明 | 输出 |
---|---|
%a | 浮点数,十六进制数和p记数法 |
%A | 浮点数,十六进制数和p记数法 |
%c | 单个字符 |
%d | 有符号十进制 |
%e | 浮点数,e记数法 |
%E | 浮点数,e记数法 |
%f | 浮点数,十进制记数法 |
%g | 根据值不同,自动选择%f或%e.%e格式用于指数小于-4或者大于或等于精度时。(用于保留有效数字) |
%G | 根据值不同,自动选择%f或%e.%e格式用于指数小于-4或者大于或等于精度时。(用于保留有效数字) |
%i | 有符号的十进制整数(与%d相同) |
%o | 无符号八进制整数 |
%p | 指针 |
%s | 字符串 |
%u | 无符号十进制整数 |
%x | 无符号十六进制整数,使用十六进制数0f |
%X | 无符号十六进制整数,使用十六进制数0F |
%% | 打印一个百分号 |
转换说明修饰符
修饰符 | 含义 |
---|---|
标记 | 下面描述了5种标记(-·+·空格·#和0),可以不使用标记或使用多个标记 |
数字 | 最小字段宽度 如果该字段不能容纳待打印的数字或字符串,系统会使用更宽的字段 |
.数字 | 精度 下面详细介绍 |
h | 和整型转换说明一起使用,表示short int 或unsigned short int 类型的值 |
hh | 和整型转换说明一起使用,表示signed char 或 unsigned char 类型的值 |
j | 和整型转换说明一起使用,表示intmax_t或uintmax_t类型的值 |
l | 和整型转换说明一起使用,表示long int 或 unsigned long int 类型的值 |
ll | 和整型转换说明一起使用,表示long long int 或 unsigned long int 类型的值 |
L | 和浮点转换说明一起使用,表示long double 类型的值 |
t | 和整型转换说明一起使用,表示ptrdiff_t类型的值。ptrdiff_t是两个指针差值的类型 |
z | 和整型转换说明一起使用,表示size_t类型的值。size_t是sizeof返回的类型。 |
详细转换说明在这个文章里数据类型
.数字 转换字符的精度 | 含义 |
---|---|
%e %E和%f | 表示小数点右边数字的位数 |
%g和%G | 表示有效数字最大位数 |
%s | 表示待打印字符的最大数字 |
整型转换 | 表示待打印数字的最小位数 |
如有必要,使用前导0来达到这个位数
只使用 . 表示其后跟随一个0,所以%.f和%.0f相同
标记 | 含义 |
---|---|
- | 待打印左对齐 |
+ | 有符号若为正,则在值前面显示加号;若为负,则在值前面显示减号 |
空格 | 有符号值若为正,则在前面显示前导空格,若为负,则值前面显示减号 |
# | 把结果转换为另一种形式,如果是%o格式,则以0开始;如果是%x或%X格式,则以0x或0X开始;对于所有的浮点格式,#保证了即使后面没有任何数字,也打印一个小数点字符。对于%g和%G格式,#防止结构后面0被删除。 |
0 | 对于数值格式,用前导0代替空格填充字段宽度。对于整数格式,如果出现-标记或指定精度,则忽略该标记 |
printf()的返回值
printf()函数也有一个返回值,他返回打印字符的个数。
如果有输出错误,printf()则返回一个负值
打印较长的字符串
三个方法:
- 使用多个printf()语句,字符串后面不以\n字符结束
- 用反斜杠 \ 和Enter 键组合来断行
printf("haldkahdkn alk dnalk dl \
akn dklan la kn");
- ANSI C引入的字符串连接,在两个用双引号括起来的字符串之间用空格隔开,C编译器会把多个字符串看成一个字符串
printf("adadaf" "fafaf");
scanf()函数
转换说明
转换说明 | 含义 |
---|---|
%c | 字符 char |
%d | 有符号十进制整数 int |
%e,%f,%g,%a | 浮点数 对应的是float类型 |
%E,%F,%G,%A | 浮点数 对应的是float类型 |
%i | 有符号十进制整数 int |
%o | 八进制整数 int |
%p | 指针 |
%s | 字符串 |
%u | 无符号十进制整数 int |
%x,%X | 有符号十六进制整数 int |
根据%c,scanf()会读取每个字符,包括空白。
scanf()所用的转换说明与printf()函数几乎相同,主要区别是对于float类型和double类型,scanf()只把%e,%f,%g,%a它们用于float类型,对于double类型要是有l修饰
转换说明修饰符
转换说明中的修饰符 | 含义 |
---|---|
* | 抑制赋值 |
数字 | 最大字段宽度 |
hh | 把整数作为signed char或unsigned char 类型读取 |
ll | 把整数作为long long 或unsigned long long 类型读取 |
h | 把整数作为short int 或unsigned short int 类型读取 |
l | long类型或unsigned long类型或double类型 |
L | 对应的是long double 类型 |
格式字符串中的普通字符
- 除普通字符外的普通字符必须与输入字符串严格匹配
例如
scanf("%d,%d",&a,&b);
用户需要输入一个数字·一个逗号然后再输入一个数字
2. 除了%c以外,其他转换说明都会自动跳过待输入值前面所有的空白
scanf()的返回值
返回成功读取的项数
printf()和scanf() 的*修饰符
printf("%*.*f",9,8,7.2)
9赋给第一个*
8赋给第二个*
7.2赋给%f
这个技巧用于指定精度和字段宽度