c - 在 C 中格式化输出

标签 c formatting output

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

#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);
}

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

如果他们要调整,我可以用名字的长度来调整吗

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

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

在一起?

这在 C 中可能吗?

最佳答案

使用可变字段宽度 * 来对齐输出。 “%*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

关于c - 在 C 中格式化输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39540028/

相关文章:

c - 为 3 个函数派生 3 个子进程

swift - 在 Swift 中使用 %@ 格式化字符串

c# - 在 C# 中更改时区

c++ - 如何格式化输出或显示?

C 编程 - 意外的输出

c++ - 重新分配而不释放旧内存

Android Studio Cmake : "The C compiler clang. exe无法编译简单的测试程序

c - 使用共享内存时出现段错误

java - 为什么 `%4.` 在我的号码中添加空格?

c - 如何在 C 中定位输入文本光标?