C 数字右对齐

C 数字右对齐,c,formatting,printf,C,Formatting,Printf,我正在尝试格式化一个值从0到9999的数字。我希望始终显示两个最重要的数字,即 5000->50 0000->00 如果任何一个最低有效数字为非零,则应显示它们,即 150->015 101->0101 这可以通过一些黑客来完成,但是C的printf可以直接完成吗?是的,您可以使用printf int v = 5000; if ((v % 100) != 0) printf("%04d", v); else printf("%02d", v/100); 是的,您可以为此使用pr

我正在尝试格式化一个值从0到9999的数字。我希望始终显示两个最重要的数字,即

5000->50
0000->00

如果任何一个最低有效数字为非零,则应显示它们,即

150->015
101->0101


这可以通过一些黑客来完成,但是C的printf可以直接完成吗?

是的,您可以使用
printf

int v = 5000;
if ((v % 100) != 0)
    printf("%04d", v);
else
    printf("%02d", v/100);

是的,您可以为此使用
printf

int v = 5000;
if ((v % 100) != 0)
    printf("%04d", v);
else
    printf("%02d", v/100);
printf(“%d”,v/(v%100?v%10?100:10:1))

试试这个:

printf(“%d”,4-!(v%100)-(v%10),v/(v%100?v%10?100:10:1))
printf(“%d”,v/(v%100?v%10?100:10:1))

试试这个:


printf(“%d”,4-!(v%100)-(v%10),v/(v%100?v%10?100:10:1))

很难看,但就我所知,它在工作:

printf("%d", value / 1000);
printf("%d", (value % 1000) / 100);
if(value % 100) printf("%d", (value % 100) / 10);
if(value % 10)  printf("%d", value % 10);
我会试着再打几次:

printf("%02d", value / 100);
if(value % 10) printf("%02d", value % 100);
else if(value % 100) printf("%d", (value % 100) / 10);


很难看,但就我所知:

printf("%d", value / 1000);
printf("%d", (value % 1000) / 100);
if(value % 100) printf("%d", (value % 100) / 10);
if(value % 10)  printf("%d", value % 10);
我会试着再打几次:

printf("%02d", value / 100);
if(value % 10) printf("%02d", value % 100);
else if(value % 100) printf("%d", (value % 100) / 10);


我不确定我是否理解你的格式。如果5000变成50,为什么150变成015而不是15?我在做美分,如果需要千分之一,如果需要万分之一。我不确定我是否理解你的格式。如果5000变为50,为什么150变为015而不是15?我在做美分,如果需要千分之一,如果需要万分之一。显然,可以添加第三个案例来正确处理“150”,但这是唯一的方法吗?是的,您可以添加任意多个案例。这只是一个如何使用
printf
格式化数字的示例。我不认为在
C
中有更好的方法,显然可以添加第三个案例来正确处理“150”,但这是唯一的方法吗?是的,您可以添加任意数量的案例。这只是一个如何使用
printf
格式化数字的示例。我不认为在
C
中有更好的方法来做这件事,对于
v==1
,应该打印
“0001”
,而不是
“1”
对于
v==1
,应该打印
“0001”
,而不是
“1”
,这并不漂亮,但这是我要求的。我用了一种更明显、更有效的方式来实现它。它并不漂亮,但这正是我所要求的。我用了一种更明显、更有效的方式来实现它。