我需要在右侧以垂直方向排列右手边的一列星号。根据输入的长度,右侧的星号会关闭。
#include <stdio.h>
#include <string.h>
#define CHECKHEADER1 "************************************************************\n"
#define CHECKHEADER2 "* *\n"
#define MAX 2
typedef char STR30[30+1];
typedef char STR302[30+1];
typedef struct EmployeeRecord
{
STR30 FullName;
STR302 GoodFullName;
} EmployeeRecord;
void CheckPrinter();
void PrintCheckHeadings(EmployeeRecord name[]);
void PrintCheckStub();
int CheckNumber = 100;
FILE * cfgfile;
int main(void)
{
int i;
EmployeeRecord name[MAX];
for ( i = 0; i < MAX; i++)
{
printf("enter username: ");
scanf("%s",name[i].FullName);
}
//name[1].FullName = "Sam Smithh";
//EmployerData = fopen("EmployerData.txt", "r");
cfgfile = fopen("strings.txt", "r");
if (cfgfile==NULL) printf("can't open file\n");
//CheckPrinter();
printf("%-1s%6s%s", "*",name[0].FullName,"*\n");
PrintCheckHeadings(name);
}
/*
void CheckPrinter()
{
PrintCheckHeadings();
}
*/
void PrintCheckHeadings(EmployeeRecord name[])
{
//printf(CHECKHEADER1);
//printf(CHECKHEADER2);
//printf("%-1s%37s%5i%17s", "*","Check Number", CheckNumber,"*");
int i=0, j=0,x=0;
int maxline = 60;
char cfgstring[16][60];
for(x=0; x<MAX; x++) printf("%s%25s\n",cfgstring[j],"*");
{
while (fgets(cfgstring[i], maxline, cfgfile)) { // while not EOF
cfgstring[i][strlen(cfgstring[i])-1] = '\0'; // remove CR from line
i++;
}
printf(CHECKHEADER1);
printf(CHECKHEADER2);
printf("%-1s%37s%5s%18s", "*","Check Number ", cfgstring[1],"*\n");
printf("%-1s%5s%41s","* ", cfgstring[2],"*\n");
printf("%-1s%5s%35s","* ", cfgstring[3],"*\n");
printf("%-1s%5s%31s","* ", cfgstring[4],"*\n");
printf(CHECKHEADER2);
printf(CHECKHEADER2);
printf("* Pay to the order of *\n");
printf(CHECKHEADER2);
printf("%-1s%6s%s", "*",name[x].FullName,"*\n");
printf(CHECKHEADER2);
printf("%-1s%15s","*","Sum in words\n");
printf(CHECKHEADER2);
printf(CHECKHEADER2);
printf("%-1s%18s","*","Reference Number\n");
printf(CHECKHEADER2);
printf(CHECKHEADER2);
printf(CHECKHEADER1);
}
fclose(cfgfile);
}
void PrintCheckStub()
{
}
请给我指明正确的方向,我需要学习如何去做,所以我不希望它完全由我来完成。 strcpy + strcat 是正确的方法吗?
看起来不错!
printf("* %-25s%7s%11.2f%10s%9.2f *\n",MyAssociate[i].FullName,"Reg Pay",MyAssociate[i].Payrate,"Fed Tax",MyAssociate[i].FedTax);
printf("* %-25s%7s%11.2f%12s%7.2f *\n",cfgstring[3],"OVT Pay",MyAssociate[i].OVT,"State Tax",MyAssociate[i].StateTax);
printf("* %-25s%7s%9.2f%10s%9.2f *\n","New Corio, New Mexico","Gross Pay",MyAssociate[i].Gross,"SSI Tax",MyAssociate[i].SsiTax);
printf("* %-25s%7s%11.2f%12s%7.2f *\n","65790","Net Pay",MyAssociate[i].NetPay,"Tax Total",TOTtax);
最佳答案
您可以使用以下模板“左对齐”任何您想要的内容:
printf("* %-56s*\n", "foo");
例子:
// 0 1 2 3 4 5 6
// 0123456789012345678901234567890123456789012345678901234567890123456789
printf("* Pay to the order of *\n");
printf("* %-56s*\n", "");
printf("* %-56s*\n", name[x].FullName);
printf("* %-56s*\n", "");
printf("* %-56s*\n", "Sum in words");
printf("* %-56s*\n", "");
如果您想将内容进一步向右移动,请根据需要调整前缀空格的数量和格式字符串 %-56s
。
注意:printf()
返回的字符数与 sprintf()
非常相似。
示例输出:
* Pay to the order of *
* *
* Foo B Bar *
* *
* Sum in words *
* *
* Reference Number *
关于c - 如何让右列垂直对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34211345/