右对齐c中的数字?

时间:2015-01-26 00:39:35

标签: c text-alignment

我有一个代码片段,如下所示 -

int main() {
  double firstNumber = 245.3252;
  double secondNumber = 32.4324;
  printf("This is my first number: %.2f", firstNumber);
  printf("And what's gonna be in the front if my second number: %.2f", secondNumber);
  return 0;
}

这样的代码的问题是它会给我一个如下所示的输出 -

This is my first number: 245.32
And what's gonna be in the front if my second number: 32.43

但是我希望输出看起来像这样(预期输出) -

This is my first number:                             245.32
And what's gonna be in the front if my second number: 32.43

我试图使用像%20s那样的宽度修饰符,但是如果我的第一个数字是十位数,那么对齐会再次出现。有人可以告诉我如何使它们看起来完全正确对齐吗?谢谢!

5 个答案:

答案 0 :(得分:2)

右对齐实际上是默认值,您只需确保正确指定宽度即可。你想要这样的东西:

printf("This is my first number:                              %8.2f", firstNumber);
printf("And what's gonna be in the front if my second number: %8.2f", secondNumber);

答案 1 :(得分:2)

最简单的方法:在第一个语句中为格式字符串添加必要的空格字符,同时确保您还修复了数字使用的字符数。

int main() {
  double firstNumber = 245.3252;
  double secondNumber = 32.4324;
  printf("This is my first number:                              %6.2f", firstNumber);
  printf("And what's gonna be in the front if my second number: %6.2f", secondNumber);
  return 0;
}

答案 2 :(得分:1)

格式化主要文字

int main(void) {
  double Number[] = { 245.3252, 32.4324 };
  const char *text[] = {"This is my first number:", 
                         "And what's gonna be in the front if my second number:"};

  // Find or set max width of text
  int width = max(strlen(text[0]), strlen(text[1]));

  // Calculate or set max width of numbers
  int maxnumwidth = 6;

  int i;
  for (int i= 0; i < 2; i++) {
    printf("%-*s %*.2f\n", width, text[i], maxnumwidth, Number[i]);
  }

  return 0;
}

%-*s
-左对齐 *从参数中获取宽度 s字符串

%*.2f
*从参数中获取宽度 .2打印到小数点后两位。
f浮动或双重

答案 3 :(得分:0)

您可以插入空格。

让我们调用最长字符串m和另一个n的长度。在这个例子中,最长的字符串是“如果我的第二个数字是32.43,那么前面会有什么”。

现在,长度最长的字符串不需要任何修改。但是,另一个字符串需要在句子后添加 m - n空格,但之前数字。所以,在“这是我的第一个数字:”之后但是在“245.32”之前。

注意:在固定宽度字体中,这将是对齐的。但是,在某些字体中,使用此方法时对齐将无法正常工作,因为字符的宽度不固定。

答案 4 :(得分:0)

那么,针对您的具体问题,请尝试以下方法:

printf(“这是我的第一个号码:\ t \ t \ t \ t \ t%.2f \ n”,firstNumber);  printf(“如果我的第二个数字:%。2f”,那么前面会有什么,第二个数字);

\ t \ t \ t(3次)+%。2f之前的4个空格