1.printf()函数的输出格式详细说明
表1 格式说明符及输出效果
格式说明符 | 输出效果 |
%c | 一个字符 |
%d | 有符号十进制整数 |
%f | 浮点数,十进制记数法 |
%e | 浮点数,e记数法 |
%E | 浮点数,E记数法 |
%g | 根据数值不同自动选择%f或%e,%e格式在指数 < -4 或 >= 精度时使用 |
%G | 根据数值不同自动选择%f或%E,%E格式在指数 < -4 或 >= 精度时使用 |
%i | 有符号十进制整数(与%d相同) |
%o | 无符号八进制整数 |
%p | 指针 |
%s | 字符串 |
%u | 无符号十进制整数 |
%x | 使用十六进制数字0~f的无符号十六进制整数 |
%X | 使用十六进制数字0~F的无符号十六进制整数 |
%% | 输出一个百分号 |
此外,在控制字符串中,我们还可以在%和格式字符之间插入修饰符,对基本的格式说明加以修改。在表2和表3中,列举了可以插入的修符。
表2 printf( )的修饰符
修饰符 | 意义 |
标志 | 5种标志(-、+、空格、#、0)将在表3中描述。可以使用零个或者多个标志。示例: "%-10d" |
digit(s) | 字段宽度的最小值。 如果字段宽度不够,则左补空格。 如果该字段不能容纳要输出的数或者字符串,系统就会使用更宽的字段。示例:"%4d" |
.digit(s) | 精度。 对于%e、%E、%f格式,是将要在小数点右边输出的数字位数。 对于%g和%G格式,是有效数字的最大位数。 对于%s格式,是将要输出字符的最大数目。 对于整数格式, 是将要输出数字的最小位数; 如果必要,要使用前导零来达到这个位数。只使用“.”表示其 后跟随一个零,所以%.f与%.0f相同。 示例: "%5.2f"为输出一个浮点数,其宽度为5个字符,小数点后有2个数字。 "%5.3s"为输出一个字符串,其宽度为5个字符,但只取字符串中左端3个字符。这3个字符输出在5列的右侧,左补空格。 |
h | 和整数格式说明符一起使用,表示一个short int或unsigned short int类型数值。 示例: "%hu"、"%hx"、"%6.4hd" |
l | 和整数格式说明符一起使用,表示一个long int或unsigned long int类型数值。示例: "%ld"、"%8lu" |
L | 和浮点数格式说明符一起使用,表示一个long double类型数值。示例:"%Lf"、"%10.4Le" |
表3 printf()的标志
标志 | 意义 |
- | 左对齐。也就是说,将输出的数据置于字段的左侧开始处 。如果字段宽度不够,则左补空格。 示例:"%-20s" |
+ | 对有符号数,若为正数,则显示加号;若为负数,则显示减号 示例:"%+6.2f" |
(空格) | 对有符号数,若为正数,则显示时带前导空格(但不显示正号); 若为负,则带减号符号,-标志会覆盖空格标志 示例:"%6.2f" |
# | 使用格式说明的可选形式。 若为% o格式,则以0开始; 若为%x或%X格式,则以0x或0X 开始。对于所有的浮点数形式,#保证了即使不跟任何数字,也输出一个小数点字符。对 于%g和%G格式,它防止尾随零被删除 示例:"%#o"、"%#8.0f"、"%+#10.3E" |
0 | 对于所有的数字格式,用前导零填充字符宽度。如果出现了一标志或指定了精度(对于整数) 则忽略该标志 示例:"%010d"、"%08.3f" |
2. scanf( )函数的输入格式详细说明
scanf( )函数的功能是:从键盘读取输入的数据。它是printf( )函数的逆操作。和printf( )函数一样,scanf( )函数也用到了控制字符串和参数列表,但是scanf()在参数列表里使用的是指向变量的指针,如表4和表5所示。
表4 scanf( )函数的格式说明符
格式说明符 | 输入数据 |
%c | 读入一个字符 |
%d | 读入一个有符号的十进制整数 |
%f、%e、%g | 读入一个浮点数 |
%F、%E、%G | 读入一个浮点数 |
%i | 读入一个有符号的十进制整数(与%d相同) |
%o | 读入一个有符号的八进制整数 |
%p | 读入一个指针 |
%s | 读入一个字符串,输入内容以第一个非空格字符作为开始,直到下一个空格字符之 间的全部字符 |
%u | 读入一个无符号的十进制整数 |
%x、%X | 读入一个有符号的十六进制整数 |
表5 scanf()函数的格式修饰符
修饰符 | 意义 |
* | 本输入项读入后略去。示例:scanf("%2d%*3d%2d",&a,&b);输入1234567↓,则系统将 12赋值给a变量,345略去,67赋值给b变量 |
digit(s) | 最大字段宽度。在达到最大字段宽度或遇到第一个空格字符时停止对输入项的读取。示 例:"%10s" |
h | 用于输入short int类型整数(如"%hd,%ho,%hx") |
l | 用于输入long int类型整数(如"%ld,%lo,%lx")以及double类型实数(如"%lf,%le") |