c - 如何让右列垂直对齐

标签 c format string-length

我需要在右侧以垂直方向排列右手边的一列星号。根据输入的长度,右侧的星号会关闭。

#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()
{


}

这是我的样子:enter image description here 这就是它需要的样子:enter image description here

请给我指明正确的方向,我需要学习如何去做,所以我不希望它完全由我来完成。 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);

输出: enter image description here

最佳答案

您可以使用以下模板“左对齐”任何您想要的内容:

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/

相关文章:

C-SYSMALLOC : Assertion failed (realloc)

perl - 如何以矩阵格式打印数组

scala - 在 Scala 中查找字符串的长度

javascript - 单击时使用 .length 对项目进行计数会产生错误的值

apache-spark - 在 Spark SQL DSL 中计算字符串长度

c - "jump to first/next error"的 Eclipse key ?

c - 如何在Flex(词法分析器)中定义数字格式?

python - 使用变量格式化对齐?

text - 文本注释的数据格式

c - 带有函数名称的 extern 关键字