簡體   English   中英

為什么我的printf輸出不正確?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM