我正在使用一个简单的程序测试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?
答案 0 :(得分:1)
使用可变字段宽度*
来对齐输出。 "%*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