2014-02-12 19 views
1

我需要對齊我的號碼。我遇到的問題涉及長度爲一位和三位的浮點數。這裏是我的輸出:如何對齊printf()中的數字?

ID  G1  G2  G3  Average 

000000065 92.000000 93.000000 86.000000 90.333336 

000000101 85.500000 75.500000 90.000000 83.666664 

000002202 100.000000 92.000000 87.250000 93.083336 

000022227 96.000000 84.000000 75.500000 85.166664 

000031303 99.000000 87.000000 62.000000 82.666664 

101010010 0.000000 81.000000 91.000000 57.333332 

424242428 77.000000 77.000000 87.500000 80.500000 

700666124 88.000000 65.000000 89.000000 80.666664 

812345676 95.000000 76.000000 87.000000 86.000000 

999999999 99.000000 99.500000 100.000000 99.500000 

這是我的打印功能:

//function that prints out contents of tree 
int print_tree (NodePtr treePtr){ 

// if statement begins 
    if (treePtr != NULL){ 
     print_tree(treePtr->left); 
     printf("%.9d %f %f %f %f\n\n", treePtr->studentID, treePtr->g1, treePtr->g2, treePtr->g3, treePtr->average); 
     print_tree(treePtr->right); 

    }//if statement ends 

    return 0;//indicates successful termination 

}//end print_tree 

正如你可以看到一些數字不正確一字排開由於一個和三位長的花車(我需要打印花車)。

+0

0.9是整數。它的工作原理是因爲所有內容的ID均勻分佈,但不是G1,G2,G3和平均值 – Michformer

+0

一旦你清理了數字間隔,你可能需要返回幷包含標題標籤的格式說明符,以便將它們對齊或在數字上方左對齊。 @ryyker在答案中指出的教程應該涵蓋它。 – lurker

回答

0

您應該指定字段寬度以及小數位數: 每次9列:

printf("%.9d %9.9f %9.9f %9.9f %9.9f\n\n", treePtr->studentID, treePtr->g1, treePtr->g2, treePtr->g3, treePtr->average); 
+0

這不起作用。仍然間隔不均勻。 – Michformer

1

Here is a good tutorial on using format specifiers for spacing

一個簡單的例子:使用格式說明符,如:

printf("%5.3f", 13.3423452); 

在你的情況下使用:

「%09D」 爲整數,該將保證使用9位,用0填充
如:爲123,000000123將打印。

「%9.7f」 爲浮,9擔保字段將是至少9寬,7會給後7位 「」

當然在每一行的最後一列添加一個\ n。

代碼示例:說我有以下輸入,格式如下所示:

printf("%20.7f\n", 1213.342345287867587); 
printf("%20.7f\n", 13.342); 
printf("%20.7f\n", 1213.342345287867587); 
printf("%20.7f\n", 1213.342345287867587); 
printf("%020d", 3); 

輸出應該是這樣的:

enter image description here

說明:,每列20個寬。 (因爲格式規範中的前20位)
浮點數用指定的空格填充以對齊數字。
整數用0填充以對齊。

+0

仍然無法正常工作。 – Michformer

+0

嗯。我相信你是統一的列寬。如果是這樣,請在格式說明符中選擇一個至少與您希望顯示的最長數字一樣寬的數字,*** + 1 ***表示列之間的間距(如果需要更多間距,則選擇+2或+3)列之間)。使用浮點數格式說明符中的「.n」來指定小數點後顯示多少個數字。如果你做這些事情,你的格式將對齊。爲了獲得更詳盡的幫助,示例(連同鏈接)幾乎涵蓋了如何對齊浮點數和整數。 – ryyker

0

(因爲020格式規範),另一種快速的解決方案是使用製表符來爲你做它(雖然它沒有正確對齊,如果算上數字相差超過8):

printf("%d\t%f\t%f\t%f\t%f\t%f\n\n", 
     treePtr->studentID, treePtr->g1, treePtr->g2, 
     treePtr->g3, treePtr->average);