【发布时间】:2016-03-16 15:31:07
【问题描述】:
我需要在右侧垂直排列一列星号。根据输入的长度,右侧的星号会关闭。
#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);
【问题讨论】:
-
@WeatherVane 认为我明白你的意思。但是如果字符串长度不同, %s 不会对齐右手边?我可能是错的......我是新手,很困惑。
-
另一种方法是使用
sprintf()来构建您需要的子字符串,它会返回它们的长度。 -
请注意,如果无法打开文件,您的程序会继续运行。
-
@PaulH.1) 除了问题之外......我不在乎,直到我让它正常工作。 2) cfgfile = fopen("strings.txt", "r"); if (cfgfile==NULL) printf("无法打开文件\n");
-
@WeatherVane 谢谢你的信息!是否可以将它与结构数组一起使用? sprintf("* " 名称[x].FullName,"*\n");我收到错误
标签: c format string-length