[英]Why is my printf output crooked?
我希望所有行都能正確對齊,但是由於某些原因,當我打印出來時,它看起來像是彎曲的,就像這樣:
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 |
我的printf調用代碼:
printf("| %10s| %-4.1f | %-4.1f | %-4.1f | %-4.1f |\n",month_names[month - 1] ,
monthly->maxTemperature,monthly->minTemperature, monthly->averageTemperature, monthly->totalPrecipitation);
謝謝!
對於這種格式化的輸出,您需要做的是粗略估計每個字段的寬度,然后讓printf
進行所有格式化,而不是計算空格然后給出%4.1f
類的東西。
例如,在這種情況下,從標題開始,粗略估計每個標題字段的寬度: printf( "|%-20s|%-10s|%-10s|%-10s|%-10s|\\n", "Month", "High", "Low", "Avg", "Precip" );
然后,對於以下各行,使用相同的寬度,只需將%s
替換為%f
以表示浮點數。 您可以操縱小數點后的位置。
printf( "|%-20s|%-10.1f|%-10.1f|%-10.1f|%-10.1f|\\n", ...
由於您將-4.1f用作printf指定符,因此小數點后總是會得到1個空格,因此4個空格不足以容納負數,而printf會在輸出中為您增加一個額外的空間。 因此,您將需要使用-5.1f獲得足夠的空間以保留一個小數點和-號。 因此,如果最后得到的數字是-123.4,則不會再次獲得正確的對齊方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.