第四章 字符串的格式化输入/输出——《C Primer Plus
2022-08-15 本文已影响0人
One2INF
第四章 字符串的格式化输入/输出
4.1 前导程序
4.2 字符串简介
C
语言没有专门用于储存字符串的变量类型,字符串都被储存 char
类型的数组中。
C 字符串:字符末尾带有空字符 \0
。
strlen()
函数返回字符串大小不包含空字符。
4.3 常量和 C 预处理器
符号常量:用宏定义如:#define TAXRATE 0.015
,TAXRATE
会在编译时替换又叫 明示常量。
C
头文件 linits.h
和 float.h
分别提供了与整数类型和浮点类型大小限制相关的详细信息。
limits.h
中的一些明示常量
明示常量 | 含义 |
---|---|
CHARBIT |
char 类型的位数 |
CHARMAX |
char 类型的最大值 |
CHARMIN |
char 类型的最小值 |
SCHARMAX |
signed char 类型的最大值 |
SCHARMIN |
signed char 类型的最小值 |
UCHARMAX |
unsigned char 类型的最大值 |
SHRTMAX |
short 类型的最大值 |
SHRTMIN |
short 类型的最小值 |
USHRTMAX |
unsigned short 类型的最大值 |
INTMAX |
int 类型的最大值 |
INTMIN |
int 类型的最小值 |
UINTMAX |
unsigned int 的最大值 |
LONGMAX |
long 类型的最大值 |
LONGM1N |
long 类型的最小值 |
ULONGMAX |
unsigned long 类型的最大值 |
LLONGMAX |
long long 类型的最大值 |
LLONGMIN |
long long 类型的最小值 |
ULLONCMAX |
unsigned long long 类型的最大值 |
float.h
中的一些明示常量
明示常量 | 含义 |
---|---|
FLT_MANT_DIG |
float 类型的尾数位数 |
FLT_DIG |
float 类型的最少有效数字位数(十进制) |
FLT_MIN_10_EXP | 带全部有效数字的 float 类型的最小负指数(以 10 为底) |
FLT_MAX_10_EXP |
float 类型的最大正指数(以 10 为底) |
FLT_MIN | 保留全部精度的 float 类型最小正数 |
FLT_MAX |
float 类型的最大正数 |
FLT_EPSILON |
1.00 和比 1.00 大的最小 float 类型值之间的差值 |
4.4 printf() 和 scanf()
转换说明及其打印的输出结果
转换说明 | 输出 |
---|---|
%a | 浮点数、十六进制数和p记数法(C99/C11 ) |
%A | 浮点数、十六进制数和p记数法(C99/C11 ) |
%c | 单个字符 |
%d | 有符号十进制整数 |
%e | 浮点数,e 记数法 |
%E | 浮点数,e 记数法 |
%f | 浮点数,十进制记数法 |
%g | 根据值的不同,自动选择 %f 或 %e 。%e 格式用于指数小于 -4 或者大于或等于精度时 |
%G | 根据值的不同,自动选择 %f 或 %e 。%e 格式用于指数小于 -4 或者大于或等于精度时 |
%i | 有符号十进制整数(与相同) |
%o | 无符号八进制整数 |
%p | 指针 |
%s | 字符串 |
%u | 无符号十进制整数 |
%x | 无符号十六进制整数,使用十六进制数 0f
|
%X | 无符号十六进制整数,使用十六进制数 0F (大写) |
%% | 打印一个百分号 |
printf() 的修饰符
修饰符 | 含义 |
---|---|
标记 | 下表描述了 5 种标记(-、+、空格、# 和 0 ),可以不使用标记或使用多个标记。示例:"%-10d"
|
数字 | 最小字段宽度;如果该字段不能容纳待打印的数字,系统会使用更宽的字段。示例:"%4d"
|
.数字 | 精度;对于 %e 、%E 和 %f 转换,表示小数点右边数字的位数;对于 %G 和 %G 转换,表示有效数字最大位数;对于 %s 转换,表示待打印字符的最大数量;对于整型转换,表示待打印数字的最小位数;如有必要,使用前导 0 来达到这个位数;只使用 . 表示其后跟随一个 0 ,所以 %.f 和 %.0f 相同。示例:"%5.2f" 打印一个浮点数,字段宽度为 5 字符,其中小数点后有两位数字。 |
h | 和整型转换说明一起使用,表示 short int 或 unsigned short int 类型的值。示例:"%hu" 、"%hx" 、"%6.4hd" 。 |
hh | 和整型转换说明一起使用,表示 signed char 或 unsigned char 类型的值。示例:"%hhu" 、"%hhx" 、"%6.4hhd" 。 |
j | 和整型转换说明一起使用,表示 intmax_t 或 uintmax_t 类型的值。这些定义在 stdint.h 中。示例:"%jd" 、"%8jx" 。 |
l | 和整型转换说明一起使用,表示 long int 或 unsigned long int 类型的值。示例:"%ld" 、"%8lu" 。 |
ll | 和整型转换说明一起使用,表示 long long int 或 unsigned long long int 类型的值(C99 )。示例:"%lld" 、"%8llu" 。 |
L | 和浮点数转换说明一起使用,表示 long double 类型的值。示例:"%Ld" 、"%10.4Le" 。 |
t | 和整型转换说明一起使用,表示 ptrdiff_t 类型的值。ptrdiff_t 是两个指针差值的类型(C99 )。示例:"%td" 、"%12ti" 。 |
z | 和整型转说明一起使用,表示 sizet_t 类型的值。size_t 是 sizeof 返回的型(C99 )。示例:"%zd" 、"%12zd" 。 |
printf() 中的标记
标记 | 含义 |
---|---|
- | 待打印项左对齐。即,从字段的左侧开始打印该项。示例:"%-20s"
|
+ | 有符号值若为正,则在前面显示加号;若为负,则在值前面显示减号。示例:"%+6.2f"
|
空格 | 有符号值若为正,则在前面显示前导空格(不显示任何符号);若为负,则在值前面显示减号+标记覆盖一个空格。示例:"%6.2f"
|
# | 把结果转为另一种形式。如果是 %o 格式,则以 0 开始;如果是 %x 或 %X 格式,则以 0x 或 0X 开始;对于所有的浮点格式,# 保证了即使后面没有任何数字,也打印一个小数点字符。对于 %g 和 %G 格式,# 防止结果后面的 0 被删除。示例:"%#o" 、"%#8.0f" 、"%+#10.3e"
|
0 | 对于数值格式,用前导 0 代替空格填充字段宽度。对于整数格式,如果出现-标记或指定精度,则忽略改标记。 |
printf()
要注意转换说明要与待打印值得类型匹配。这是 printf()
不定参数要求,原理:将待打印值压栈,根据转换类型出栈。所以转换类型如果不一致(压栈、出栈大小不一样)可能会破坏栈结构。
scanf()
与 printf()
转换说明类似。
scanf()
格式化输入,要求遵循指定格式才能正确输入。
scanf()
返回值:0
:格式不匹配;EOF
:检测到文件尾。
*** 修饰符**
-
printf()
通过程序指定字段宽度。如下:printf("The number is %*d\n", 7, number);
-
scanf()
跳过相应的输入项,仅读取指定项。如下:scanf("%*d %*d %d", &n);
C
语言有其本地化设置。