问题遇到的现象和发生背景
把链表中的数据输入到文件中,用%-20s的类似形式,exe显示都是对齐的,但是文本文件(即记事本)中数据对不齐
细节:当专业和姓名出现字数不同时,字数越多,偏移越大
遇到的现象和发生背景,请写出第一个错误信息
我想知道如何让文本文件数据左对齐?出错原因?
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
//1. 录入并保存信息:把学生信息保存到文件 stu.txt 中,输入学生基本信息、课外表现分和各科成绩信息;
struct Student * enter(struct Student *head)
{
int i=1;//i代表序号
struct Student *p1=NULL,*p2=NULL;
FILE *fp= fopen("./stu.txt","w+");//打开文件
if(fp == NULL)
{
printf("wu fa da kai wen jian,qing chong xin shi yong");
return 0;
}
fprintf(fp,"ji dian guan li xi tong\n");
fprintf(fp," zuangye banji xingmin gaoshu yingyu yuwen xueye kewai jididan\n");//学业总成绩拼音太长,取了前两个字拼音
//对文件的操作
printf("************* 1. lu yong bing bao cun xin xi **********\n");
printf("qing shu ru zuangye banji xingmin gaoshu yingyu yuwen kewai \n");
printf("xu yao jie shu qing zai zuangye wei shu ru (jieshu) jie shu \n");
printf("ju li:wangluo(han zi ban) 22-1 ZhangSan(han zi ban) 100 33 90 90\n");
printf("zuangye banji xingmin gaoshu yingyu yuwen kewai\n");//使用说明
head = p1 = NULL;
head=p1=p2=(struct Student *)malloc(sizeof(struct Student));
head = p1;
while(1)
{
printf("xiang tui chu,qing shu ru(jieshu)\n");
scanf("%s",p1->zuang);
if(strcmp(p1->zuang,"jieshu")==0)//专业填写jieshu退出
{
p2->next=p1;
p1=NULL;
break;
}
scanf("%s%s%f%f%f%f", p1->ban, p1->xing, &p1->gaoshu, &p1->yingyu, &p1->yuwen, &p1->kewai);//scanf不能决定精度
if(p1->gaoshu < 0 && p1->yingyu < 0 && p1->yuwen < 0 && p1->kewai < 0 && p1->gaoshu > 100 && p1->yingyu > 100 && p1->yuwen > 100 && p1->kewai > 100)//成绩输入错误提醒
{
printf("shu ru cheng ji chu cuo,cheng ji ying zai 0~100 de fan wei,gai ren xin xi bu lu yong,qing zai ci tian xie");
}
else//成绩输入正确才到下一节点
{
p2->xueye = p2->gaoshu + p2->yingyu + p2->yuwen;
p2->jidian = 0.7*p2->xueye + 0.3*p2->kewai;
fprintf(fp,"%-6d%-27s%-9s%-15s%-9.1f%-9.1f%-9.1f%-9.1f%-9.1f%-9.1f\n",i,p2->zuang, p2->ban, p2->xing, p2->gaoshu, p2->yingyu, p2->yuwen, p2->xueye, p2->kewai, p2->jidian);
fflush(fp);//计算完存储数据保存在stu.txt
p1=(struct Student *)malloc(sizeof(struct Student));
p2->next=p1;
p2=p1;
i++;
}
}
p2->next = NULL;//指向空
fclose(fp);
fp=NULL;//关闭文件指针
return head;
}
//3. 读取stu.txt文件的全部学生信息并显示 :打开 stu.txt 文件,创建新链表存储文件数据并输出
int show()//与学生系统的个人成绩查询一样的方法 //要stu.txt里面有数据
{
int i,g=0;
char a[100];//用于接受文件中的第一行文字 fprintf(fp,"ji dian guan li xi tong \n");
char b[100];//用于接受文件中的第二行文字,即学生各方面信息
struct Student *p2=NULL,*p1=NULL,*p3=NULL,*head=NULL;
FILE *fp;
printf("************* 3. xian shi bing du qu quan xue sheng xin xi *********\n");
fp = fopen("./stu.txt","r+");//打开文件
if(fp == NULL)
{
printf("wu fa da kai wen jian,qing chong xin shi yong\n");
return 0;
}
i=1;
fgets(a,100,fp);
puts(a);
fgets(b,100,fp);
puts(b);
p1=p2=(struct Student *)malloc(sizeof(struct Student));
p3=(struct Student *)malloc(sizeof(struct Student));
head=p1;
while(1)
{
fscanf(fp,"%d%s%s%s%f%f%f%f%f%f\n",&i,p2->zuang, p2->ban, p2->xing, &p2->gaoshu, &p2->yingyu, &p2->yuwen, &p2->xueye, &p2->kewai, &p2->jidian);
if(g==i)//利用循环时到想打印的都打完,最后序号i与序号i相等且为固定值,其他为乱码 //原理不知
break;
printf("%-6d%-27s%-9s%-15s%-9.1f%-9.1f%-9.1f%-9.1f%-9.1f%-9.1f\n",i,p2->zuang, p2->ban, p2->xing, p2->gaoshu, p2->yingyu, p2->yuwen, p2->xueye, p2->kewai, p2->jidian);
//数据从stu.txt输出到链表
p1=(struct Student *)malloc(sizeof(struct Student));
p2->next=p1;
p3=p2;
p2=p1;
g=i;
}
p3->next=NULL;
p1 =p2= NULL;
p2=head;
fclose(fp);
fp = NULL;//关闭文件指针
getchar();
getchar();
return 0;
}
运行结果及详细报错内容
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我尝试解决,以为是文本文件与程序运行的exe对应一个字的空格多少不同,但尝试失败
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
谢谢回答,应要求,使用说明用的是拼音,不容易理解,请多见谅。