html输出空格-C语言printf——动态指定输出格式的宽度

printf() 函数

请求 printf() 函数复制数据的指令必须与要复制的数据类型匹配。 例如,打印整数时使用 %d,打印字符时使用 %c。 这些符号称为转换规范html输出空格,它们指定如何将数据转换为可显示的形式。

常用的输出低格式转换指令:

 * %a 浮点数、十六进制数* %A 浮点数、十六进制数* %c 单个字符* %d 有符号十进制整数* %e 浮点数、e记数法* %E 浮点数、e记数法* %f 浮点数、十进制记数法* %g 根据值的不同自动选择%f或%e* %i 与%d相同* %o 无符号八进制整数* %p 指针* %s 字符串* %u 无符号十进制整数* %x 无符号十六进制整数,使用十六进制数of* %X 无符号十六进制整数,使用十六进制数OF* %% 打印一个百分号

printf()函数的格式:

printf(格式字符串,要复制的项目1,要打印的项目2,...);

注意:格式字符串中的转换指令必须与前面的每一项相匹配

printf("Farewell! thou art too dear for my possessing,n");
printf("%c%dn", '$', 2 * cost);

列表中要复制的第一项是字符常量,而不是变量; 第二项是加法表达式。 这表明 printf() 使用值,无论它们是变量、常量还是表达式值。

printf() 的转换规范修饰符

说明:在 % 和转换字符之间插入修饰符以修改基本转换规范。

修饰语

意义

标记

5种标记(-、+、空格、#和0),可以不使用标记,也可以使用多个标记

示例:“%-10d”

数字

是最小数组长度。 如果数组无法容纳要复制的数字或字符串,系统将使用更宽的数组。

示例:“%4d”

。数字

准确性

对于 %e、%E 和 %f 转换,小数点右侧的位数

对于 %g 和 %G 转换,表示有效数字的最大位数

对于%s转换,表示要复制的最大字符数

对于整数转换,表示要复制的数字的最小位数

如有必要,请使用前导 0 来达到此位数

只需使用 . 表示后面跟着一个 0,所以 %.f 和 %.0f 是相同的

空格输出set_空格输出Python_html输出空格

示例:%5.2 复制字段长度为 5 个字符、小数点后两位的浮点数。

与整数转换指令一起使用,表示short int或unsigned Short int类型的值。

示例:%hu、%hx、%6.4hd

呵呵

与整数转换指令一起使用,表示signed char或unsigned char类型的值

示例:%hhu、%hhx、%6.4hhd

与整数转换指令一起使用,表示intmax_t或unintmax_t类型的值。 这些类型在 stdint.h 中定义

示例:%jd、%8jx

与整数转换指令一起使用,表示long int或unsigned long int类型的值。

示例:%ld、%8lu

与整数转换指令一起使用,表示long long int或unsigned long long int类型的值(C99标准)

示例:%lld、%8llu

与浮点转换指令一起使用,表示 long double 类型的值

示例:%Lf,.4Le

与整数转换指令一起使用,表示ptrdiff_t类型的值。 ptrdiff_t 是两针差异的类型(C99标准)

示例:%jd、%8jx

与整数转换指令一起使用,表示size_t类型的值。 size_t 是 sizeof 返回的类型(C99 标准)

示例:%zd,zd

标记

标记

意义

要打印的项目是左对齐的。即从主键左侧开始复制项目

示例:%-20s

如果有符号的值为正,则该值上方显示负号; 如果为负数,则该值上方会显示一个加号。

示例:%+6.2f

空间

如果有符号值为正,则在该值上方显示前导空格(不显示符号); 如果为负,则值上方会显示一个加号 + 标记,并覆盖空格。

示例:%6.2f

将结果转换为另一种方式。 如果是%o格式则从0开始; 如果是%x或%X格式,则以0x或0X开头; 对于所有浮点格式,#确保即使前面没有数字,也会复制小数点字符。对于%g和%G格式,#防止结果旁边的0被删除

示例:%#o、%#8.0f、%+#10.3e

对于数字格式,用前导 0 而不是空格填充数组长度。对于整数格式,如果存在 - 标志或指定精度,则忽略该标志

示例:0d、.3f

代码示例

/* width.c -- 字段宽度 */
#include 
#define PAGES 959
int main(void)
{printf("*%d*n", PAGES);printf("*%2d*n", PAGES);printf("*d*n", PAGES);printf("*%-10d*n", PAGES);return 0;
}

运行结果:

第一个转换规范 %d 没有任何修饰符,其对应的输出结果与具有整数数组长度的转换规范的输出结果相同。 默认情况下,不带任何修饰符的转换规范是复制结果。

第二个转换描述是%2d,其对应的输出结果应该是数组长度为2。由于要复制的整数有3位,因此需要手动扩展数组长度以适应整数的厚度。

第三个转换描述为d,其对应的输出结果有10个空格。 事实上,两个星号之间有7个空格和3个数字,并且数字位于数组的右侧。

最后的转换规范是%-10d,对应的输出结果也是相隔10个空格,并且-标记表示复制的数字位于数组的左侧。 熟悉了它们的用法后,我们就可以很好地控制输出格式了。 尝试更改 PAGES 的值以查看编译器如何复制具有不同数字的数字。

// floats.c -- 一些浮点型修饰符的组合
#include 
int main(void)
{const double RENT = 3852.99;  // const变量printf("*%f*n", RENT);printf("*%e*n", RENT);printf("*%4.2f*n", RENT);printf("*%3.1f*n", RENT);printf("*.3f*n", RENT);printf("*.3E*n", RENT);printf("*%+4.2f*n", RENT);printf("*0.2f*n", RENT);return 0;
}

运行结果:

本例中的第一个转换规范是 %f。 在这些情况下,字段长度和小数点后面的位数都是系统默认值,即数组长度是容纳要复制的数字和小数点后 6 位所需的位数。

第二个转换规范是%e。 默认情况下,编译器在小数点一侧复制 1 个数字,在小数点两侧复制 6 个数字。 数字太多,无法复制! 解决方案是指定小数点左侧显示的位数,这就是程序中接下来的 4 个实例的作用。 请注意,第 4 种和第 6 种情况对输出进行四舍五入。 另外,第六示例使用E代替e。

第七个转换规范包含 + 符号,这会导致将附加代数符号 (+) 附加到复制的值。 0 标志导致复制的值用 0 填充以满足数组要求。 请注意,0.2f 的转换说明中的第一个 0 是标记,句点(.)之前和标记之后的数字(本例中为 10)是指定的数组长度。

/* flags.c -- 演示一些格式标记 */
#include 
int main(void)
{printf("%x %X %#xn", 31, 31, 31);printf("**%d**% d**% d**n", 42, 42, -42);printf("**%5d**%5.3d**d**.3d**n", 6, 6, 6, 6);return 0;
}

运行结果:

第一行输出中,1f是一个十六进制数html输出空格,等于十的补数31。在第1行的printf()语句中,1f是根据%x复制出来的,1F是根据%X复制出来的,并根据%#x复制出0x1f。

输出的第 2 行演示了如何在转换规范中使用空格来在输出中生成正值上方的前导空格,而负值后不生成前导空格。 这样的输出更加美观,因为复制的正值和负值在相同的数组长度下具有相同的有效位数。

输出的第 3 行演示了如何使用整数格式的精度 (%5.3d) 来生成足够的前导零以满足所需的最小位数(在本例中为 3)。 但是,使用 0 标志将导致编译器用前导零填充数组的整个长度。 最后,如果 0 标志精确存在,则忽略 0 标志。

/* stringf.c -- 字符串格式 */
#include 
#define BLURB "Authentic imitation!"
int main(void)
{printf("[%2s]n", BLURB);printf("[%24s]n", BLURB);printf("[%24.5s]n", BLURB);printf("[%-24.5s]n", BLURB);return 0;
}

运行结果:

请注意,虽然第一个转换规范是 %2s,但数组会扩展以容纳字符串中的所有字符。 另请注意,精度限制了要复制的字符数。 .5 告诉 printf() 仅复制 5 个字符。 此外,- 标志使文本左对齐输出。