在C中格式化输出

时间:2016-09-16 21:02:13

标签: c formatting output

我正在使用一个简单的程序测试C中的输入格式以熟悉C&C命令,而我似乎无法弄清楚如何将这一个输出格式化为动态。所以这就是我的问题:当你输入一个名字时,工资,税金和净支付不会调整到空间,使它看起来很糟糕。如果我输入一个looooong名字,它将在同一行上移动,而不会出现在定义该数字的指定列下面。这是我的代码:

#include <stdio.h>

main()
{
    char name[20];
    char *nameptr = name;
    double netpay, tax, salary;

    printf("Enter Name: ");
    scanf("%s", nameptr);
    printf("\nEnter salary: ");
    scanf("%lf", &salary);

    tax = (salary * 0.25);
    netpay = salary - tax;

    printf("\n\nName\t\tSalary\t  Tax\t  Netpay\n");
    printf("-------------------------------------------\n");
    printf("%s", nameptr);

    printf("%15.2lf  - %.2lf  =  %.2lf\n\n",salary, tax, netpay);
}

我希望程序让数字保持原样,而不是按名称长度调整。

OR

如果必须调整,我可以使用名称的长度来调整

printf("\n\nName\t\tSalary\t  Tax\t  Netpay\n");

printf("%15.2lf  - %.2lf  =  %.2lf\n\n",salary, tax, netpay);

一起?

这可能在C?

1 个答案:

答案 0 :(得分:1)

使用可变字段宽度*来对齐输出。 "%*s"@Barmar
使用-左对齐。 "%-*s"
使用printf()的返回值来生成"---"

这种方法的优点在于Name_WidthMoney_Width可用于控制列标题的宽度和数据的宽度。

  int Money_Width = 15;
  int Name_Width = strlen(nameptr);
  if (Name_Width < 4) Name_Width = 4; // "Name" width

  puts("");  // \n

  int width = printf("%-*s %*s %*s %*s\n", Name_Width, "Name", Money_Width,
      "Salary", Money_Width, "Tax", Money_Width, "Netpay");

  for (int i = 0; i < width; i++) {
    putchar('-');
  }
  puts("");  // \n

  printf("%-*s %*.2f %*.2f %*.2f\n", Name_Width, nameptr,
      Money_Width, salary, Money_Width, tax, Money_Width, netpay);

示例输出

Enter Name: asd

Enter salary: 123

Name          Salary             Tax          Netpay
-----------------------------------------------------
asd           123.00           30.75           92.25