这种printf格式是否可行(左对齐符号,零符号)

wat*_*ake 4 c string formatting printf string-formatting

我正在尝试使用printf来获得以下编程输出:

- 20
- 15
- 10
-  5
   0
+  5
+ 10
+ 15
+ 20
Run Code Online (Sandbox Code Playgroud)

关键规格是:

  • 字段宽度始终为4
  • 标志始终是左对齐的
  • 这个数字总是正确的
  • 零没有迹象

到目前为止,我还没有能够提出一个能给我预期结果的printf语句.我最接近的是:

for(int i = -20; i <= 20; i+=5)
{
    printf("%-+4d \n", i);
}
Run Code Online (Sandbox Code Playgroud)

产生:

-20                                                                                                                              
-15                                                                                                                              
-10                                                                                                                              
-5                                                                                                                               
+0                                                                                                                               
+5                                                                                                                               
+10                                                                                                                              
+15                                                                                                                              
+20                                                                                                                              
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,而不必做任何繁琐的字符串操作?

ike*_*ami 6

printf("%c%3d\n", i>0 ? '+' : i<0 ? '-' : ' ', abs(i));
Run Code Online (Sandbox Code Playgroud)

请注意,上述操作失败了INT_MIN,但这不应该是一个问题,因为您的值只有少于1000的数量级.