为什么我的printf输出弯曲了?

时间:2015-12-08 00:32:01

标签: c debugging printf

我希望我的所有线条都能正确排列,但出于某种原因,当我将其打印出来时,它看起来很弯曲,就像这样:

Activity

我的printf调用代码:

Weather summary for 2013

|   Month   | High  |  Low  |  Avg  | Precip  |
|-----------|-------|-------|-------|---------|
|    January| 9.8   | -26.2  | -7.8  | 55.3  |
|   February| 7.5   | -23.3  | -8.6  | 33.1  |
|      March| 14.2  | -19.6  | -4.7  | 33.2  |
|      April| 23.7  | -5.3  | 6.2   | 56.8  |
|        May| 33.0  | -0.6  | 13.9  | 62.7  |
|       June| 32.1  | 8.0   | 19.7  | 69.7  |
|       July| 34.9  | 12.6  | 22.2  | 181.8  |
|     August| 31.5  | 11.0  | 20.9  | 69.2  |
|  September| 34.1  | 5.0   | 16.1  | 69.0  |
|    October| 24.8  | -2.9  | 10.8  | 56.9  |
|   November| 16.0  | -12.8  | 2.1   | 36.2  |
|   December| 15.6  | -17.8  | -4.2  | 65.8  |

谢谢!

2 个答案:

答案 0 :(得分:2)

对于这种格式化的输出,你只需粗略估计每个字段的宽度,然后让printf完成所有的格式化,而不是计算空格,然后得出类似{{1 }} ..

例如,在这种情况下,从标题开始,粗略估计每个标题字段的宽度: %4.1f

然后对于以下行,使用相同的宽度,只需将printf( "|%-20s|%-10s|%-10s|%-10s|%-10s|\n", "Month", "High", "Low", "Avg", "Precip" );替换为%s以获取浮点数。您可以操纵小数点后的位置数。

%f

答案 1 :(得分:0)

由于您使用-4.1f作为printf说明符,因此在小数点后总是会得到1个空格,因此对于负数而言,总共4个空格是不够的,而printf在输出中添加了额外的空格您。因此,您需要使用-5.1f为一个小数点和 - 符号获取足够的空间。所以,如果你得到像-123.4这样的数字,你将无法再次正确对齐。