如何在printf()中对齐我的数字?

时间:2014-02-12 16:14:17

标签: c printing printf tabular

我需要正确对齐我的号码。我遇到的问题是处理长度为一位和三位的浮点数。这是我的输出:

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

正如你所看到的,由于一个和三个数字长的花车(我需要打印花车),有些数字没有正确排列。

3 个答案:

答案 0 :(得分:1)

Here is a good tutorial on using format specifiers for spacing

一个简单示例: 使用格式说明符,例如:

    printf("%5.3f", 13.3423452);  

在您的情况下使用:

“%09d”表示整数 09 将保证使用9个空格,填充0s
例如:对于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填充以对齐。 (因为020格式规范。)

答案 1 :(得分:0)

您应该指定字段宽度以及小数位: 例如每次9列:

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

答案 2 :(得分:0)

另一个快速解决方案是使用制表符来为您完成(虽然如果数字计数差异大于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);