拉丁的传说
#include#include#includestruct student{char name[20];int num;float score;struct student* pnext;};int count;struct student* creat(){struct student* phead=NULL;struct student* ptail,*p;count=0;ptail=p=(struct student*)malloc(sizeof(struct student));printf("依次输入学生学号,姓名,成绩:\n");scanf("%d%s%f",&p->num,p->name,&p->score);while(p->num!=10){count++;if(count<=10){p->pnext=phead;ptail=p;phead=p;}else{p->pnext=NULL;ptail->pnext=p;ptail=p;}p=(struct student*)malloc(sizeof(struct student));scanf("%d%s%f",&p->num,p->name,&p->score);}free(p);return phead;}void print(struct student* phead){struct student *ptemp;int index=1;printf("--这个链表中有%d个学生--\n",count);printf("\n");ptemp=phead;while(ptemp!=NULL){printf("学生%d是: ",index);printf("学号%d ",ptemp->num);printf("姓名%s ",ptemp->name);printf("成绩%f \n",ptemp->score);printf("\n");ptemp=ptemp->pnext;index++;}}struct student* insert(struct student* phead){struct student* p;printf("插入一个成员\n");p=(struct student*)malloc(sizeof(struct student));scanf("%d%s%f",&p->num,p->name,&p->score);p->pnext=phead;phead=p;count++;return phead;}void delet (struct student* phead,int index)//把delete改成了delet,其他没变,否则我的系统编译出错。{int i;struct student* ptemp;struct student* ppre;ptemp=phead;ppre=ptemp;printf("删除第%d个学生\n",index);for(i=1;ipnext;}ppre->pnext=ptemp->pnext;free(ptemp);count--;}void file(struct student* phead){FILE *fp;if((fp=fopen("D:\\cx.txt","wb"))==NULL){printf("file can not open!\n"); exit(1);}int index=1;//加上这一句while(phead!=NULL){//fwrite(phead,sizeof(struct student),1,fp);//屏蔽这一句//加上下面这几句fprintf(fp,"学生%d是: ",index);fprintf(fp,"学号%d ",phead->num);fprintf(fp,"姓名%s ",phead->name);fprintf(fp,"成绩%f \n",phead->score);fprintf(fp,"\n");index++;//okphead=phead->pnext; }fclose(fp);printf("-----成功保存信息!-----\n");}int main(){struct student* phead;phead=creat();phead=insert(phead);delet(phead,2);print(phead);file(phead);return 0;}试试看可以文本打印没?,一个小提醒:你的程序运行似乎有点小问题,自己看看吧改成下面可能容错性会好一点,也试试:(我也初学,请见谅!)#include#include#includetypedef struct Student//这里我用了首字母大写{char name[20];int num;float score;struct Student * pnext;//这里如果把struct Student改成student会编译出错(以前没注意)}student;//利用typedef后面可以省力点int count;student * creat(){student * phead=NULL;student * ptail, * p;count=0;ptail=p=(student *)malloc(sizeof(student));printf("依次输入学生学号,姓名,成绩:\n");scanf("%d%s%f",&p->num,p->name,&p->score);while(p->num!=0)//这里我改了,容错性会好些,输入学号为0时会结束输入,//后面程序也考虑了空记录的情况{count++;if(count==1)//第一条记录为头记录phead=p;//设置第一条记录为头记录elseptail->pnext=p;ptail=p;p=(student*)malloc(sizeof(student));scanf("%d%s%f",&p->num,p->name,&p->score);}ptail->pnext=NULL;//设置尾记录指向空地址return phead;}void print(student* phead){student *ptemp;ptemp=phead;int index=1;printf("--这个链表中有%d个学生--\n",count);printf("\n");if (phead!=NULL)//判断是不是为空记录{do{printf("学生%d是: ",index);printf("学号%d ",ptemp->num);printf("姓名%s ",ptemp->name);printf("成绩%f \n",ptemp->score);printf("\n");ptemp=ptemp->pnext;index++;}while(ptemp!=NULL);//看看不用do...while换成while行不?有时会搞不明白的,呵呵}}student* insert(student* phead)//插入函数未改动,但该函数是插到第一个之前的,可以改一下{student* p;printf("插入一个成员\n");p=(student*)malloc(sizeof(student));scanf("%d%s%f",&p->num,p->name,&p->score);p->pnext=phead;phead=p;count++;return phead;}student* delet (student* phead,int index)//我把delete改成delet了否则我的编译器没法通过{int i;student* ptemp;student* ppre;ptemp=phead;ppre=ptemp;printf("删除第%d个学生\n",index);if(index>count || index<=0)//提高了容错性printf("共有%d个记录,无法删除第%d个学生\n",count,index);else{if (1==index){phead=phead->pnext;}else{for(i=1;ipnext;}ppre->pnext=ptemp->pnext;}free(ptemp);count--;}return phead;}void file(student* phead){FILE *fp;if((fp=fopen("D:\\cx.txt","wb"))==NULL){printf("file can not open!\n"); exit(1);}student *ptemp;ptemp=phead;int index=1;fprintf(fp,"--这个链表中有%d个学生--\n",count);fprintf(fp,"\n");if (ptemp!=NULL){do{fprintf(fp,"学生%d是: ",index);fprintf(fp,"学号%d ",ptemp->num);fprintf(fp,"姓名%s ",ptemp->name);fprintf(fp,"成绩%f \n",ptemp->score);fprintf(fp,"\n");ptemp=ptemp->pnext;index++;}while(ptemp!=NULL);}fclose(fp);printf("-----成功保存信息!-----\n");}int main(){student* phead;phead=creat();phead=insert(phead);phead=delet(phead,2);//分别改成0,1,2,末记录,试试原来的程序这里有问题的print(phead);file(phead);return 0;}