Ric*_*ral 31 c printf alignment
我需要将C中的一系列数字与printf()对齐,如下例所示:
-------1
-------5
------50
-----100
----1000
Run Code Online (Sandbox Code Playgroud)
当然,所有这些之间都有数字,但它与手头的问题无关......哦,将破折号视为空格,我使用破折号,因此更容易理解我想要的东西.
我只能做到这一点:
----1---
----5---
----50--
----100-
----1000
Run Code Online (Sandbox Code Playgroud)
或这个:
---1
---5
--50
-100
1000
Run Code Online (Sandbox Code Playgroud)
但这些都不是我想要的,我只能使用printf()来实现第一个例子中显示的内容.有可能吗?
编辑:
对不起的人,我很匆忙,并没有很好地解释自己...我的最后一个例子和你的所有建议(使用像"%8d"之类的东西)不起作用,因为虽然最后一个数字是1000,但它没有对于那件事,一定要一直到1000甚至100或10.
无论要显示的位数,我最多只需要4个前导空格作为最大数字.假设我必须显示从1到1000(A)和1到100(B)的数字,我使用两个"%4d",这将是输出:
A:
---1
....
1000
Run Code Online (Sandbox Code Playgroud)
哪个是我想要的输出...
B:
---1
....
-100
Run Code Online (Sandbox Code Playgroud)
这不是我想要的输出,我实际上想要这个:
--1
...
100
Run Code Online (Sandbox Code Playgroud)
但就像我说的,我不知道我必须打印的确切数字,它可以有1位数,它可以有2个,3个或更多,该函数应该为所有人准备.而且我想要额外增加四个前导空间,但那并不相关.
编辑2: 似乎我想要的,我需要它的方式,这是不可能的(查看David Thornley和Blank Xavier的答案和我的评论).谢谢大家的时间.
dwc*_*dwc 46
为什么printf("%8d\n", intval);不为你工作?这应该...
您没有显示任何"不工作"示例的格式字符串,所以我不确定还有什么可以告诉您.
#include <stdio.h>
int
main(void)
{
int i;
for (i = 1; i <= 10000; i*=10) {
printf("[%8d]\n", i);
}
return (0);
}
$ ./printftest
[ 1]
[ 10]
[ 100]
[ 1000]
[ 10000]
Run Code Online (Sandbox Code Playgroud)
编辑:对澄清问题的回应:
#include <math.h>
int maxval = 1000;
int width = round(1+log(maxval)/log(10));
...
printf("%*d\n", width, intval);
Run Code Online (Sandbox Code Playgroud)
宽度计算计算日志基数10 + 1,它给出了位数.花哨*允许您将变量用于格式字符串中的值.
您仍然必须知道任何给定运行的最大值,但在任何语言或铅笔和纸张中都无法解决.
Dav*_*ley 45
在我方便的哈比森和斯蒂尔看这个....
确定字段的最大宽度.
int max_width, value_to_print;
max_width = 8;
value_to_print = 1000;
printf("%*d\n", max_width, value_to_print);
Run Code Online (Sandbox Code Playgroud)
请记住,max_width必须是int与星号一起使用的类型,并且您必须根据您想要拥有的空间来计算它.在您的情况下,您将必须计算最大数字的最大宽度,并添加4.
| 归档时间: |
|
| 查看次数: |
124617 次 |
| 最近记录: |