这是我在牛客刷题时,遇到的一个格式化输出问题,也就是%n.ms。在自己试验后发现了一些不清楚的小问题以及一些有趣的地方,特此记录,如有错误,欢迎指正。
在C语言中,格式化输入输出函数(如printf
和scanf
)使用格式说明符来控制数据的显示和解析方式。以下是对各个格式说明符的详细解释:
-
%nd
- 解释:显示n个字符宽度,不够则补充空格,右对齐。
- 示例:假设有一个整数
int a = 123;
,使用printf("%5d", a);
将输出123
,其中前两个字符是空格。
-
%-nd
- 解释:显示n个字符宽度,不够则补充空格,左对齐。
- 示例:假设有一个整数
int a = 123;
,使用printf("%-5d", a);
将输出123
,其中后两个字符是空格。
-
%0nd
- 解释:显示n个字符宽度,不够则补充0,右对齐。
- 示例:假设有一个整数
int a = 123;
,使用printf("%05d", a);
将输出00123
。
-
%n.mf
- 解释:显示n个字符宽度(小数点也算一位),不够则补充空格,m表示小数点后几位(四舍五入,不够补0),右对齐。当输入的字符大于n时,n的限制就会被忽略,从而输出所有必要的字符,不会出现截断,但是不影响m。
- 示例1:假设有一个浮点数
double b1 = 123.456;
,使用printf("%7.2f", b1);
将输出123.46
,其中前一个字符是空格。 - 示例2:假设有一个浮点数
double b2 = 123.456;
,使用printf("%1.2f", b2);
将输出123.46
,没有空格。
-
%g
- 解释:不显示小数点后多余的0。
- 示例:假设有一个浮点数
double c = 123.456000;
,使用printf("%g", c);
将输出123.456
。
-
%e
- 解释:以指数形式输出浮点数。
- 示例:假设有一个浮点数
double d = 12345.6789;
,使用printf("%e", d);
将输出1.234568e+04
。
-
%6.9s
- 解释:表示显示一个长度不小于6且字符数不大于9的字符串。若大于9, 则第9个字符以后的内容将被删除。
- 示例:假设有一个字符串
char str[] = "Hello, World!";
,使用printf("%6.9s", str);
将输出Hello, Wo
。
这些格式说明符提供了灵活的方式来控制数据的显示格式,使得输出结果更加符合需求。
测试如下:
结果如下: