我正在使用一个简单的程序测试 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_Width
和 Money_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/