【问题标题】:How do I align my numbers in a printf()?如何在 printf() 中对齐我的数字?
【发布时间】:2014-02-12 16:14:17
【问题描述】:

我需要正确对齐我的数字。我在处理一位数和三位数的浮点数时遇到问题。这是我的输出:

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

正如您所见,由于一位和三位长的浮点数(我需要打印浮点数),一些数字没有正确排列。

【问题讨论】:

  • .9 用于整数。它之所以有效,是因为 ID 的所有内容都是均匀分布的,而不是 G1、G2、G3 和平均值
  • 整理好数字间距后,您可能需要返回并包含标题标签的格式说明符,以使它们在数字上方右对齐或左对齐。 @ryyker 在他的回答中指出的教程应该涵盖它。

标签: c printing printf tabular


【解决方案1】:

Here is a good tutorial on using format specifiers for spacing

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

    printf("%5.3f", 13.3423452);  

在你的情况下使用:

"%09d" 表示整数09 将保证使用 9 个空格,用 0 填充
例如:对于 123,将打印 000000123。

"%9.7f" 表示浮点数,9 Guarantees 字段将至少为 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);

输出如下所示:

注意:,每列宽 20。 (因为在格式规范中领先 20。)
浮点数用指定的空格填充以对齐数字。
整数用 0 填充以对齐。 (因为 020 格式规范。)

【讨论】:

  • 嗯。我相信您追求的是统一的列宽。如果是这样,请在格式说明符中选择一个至少与您要显示的最长数字一样宽的数字,+1 表示列之间的间距(或 +2或 +3 如果列之间需要更大的间距)。使用浮点格式说明符中的“.n”来指示小数点后要显示多少个数字。如果您执行这些操作,您的格式将对齐。如需更详尽的帮助,示例(连同链接)几乎涵盖了如何对齐浮点数和整数。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    另一种快速的解决方案是使用制表符为您执行此操作(但如果位数差异大于 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 2014-12-18
      • 1970-01-01
      相关资源
      最近更新 更多