帮忙修改下read()函数,谢谢
程序代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int num=0; FILE *fp; typedef struct node_s{ //typedef:定义别名,作用:定义一个结构体,该结构体的别名为PNode char name[10]; char date[13]; char earning[10]; char remarks[100]; struct node_s *pnext; }Node,*PNode; PNode createNode(){//创建节点,返回一个指针 PNode head = NULL;//指针初始化。 head = (PNode)malloc(sizeof(Node));//创建节点。 head->pnext=NULL; strcpy(head->name,"\0");//首项仅初始化,不保存数据!~ strcpy(head->date,"\0"); strcpy(head->earning,"\0"); strcpy(head->remarks,"\0");//首项仅初始化,不保存数据!~ return head; } int split(char dst[][1000], char* str, const char* spl){/*分割文本*/ int n = 0; char *result = NULL; result = strtok(str, spl); while( result != NULL ){ strcpy(dst[n++], result); result = strtok(NULL, spl); } return n; } void save(PNode head){ PNode temp = head->pnext;//默认非初始化项目开始。 fp=fopen("1.txt","wb"); while(temp!=NULL) { fwrite(temp,sizeof(struct node_s),1,fp); temp=temp->pnext; } fclose(fp); } int read(PNode head){ int i=0,ReadNumFlag=0; PNode temp = head->pnext;//默认非初始化项目开始。 fp=fopen("1.txt","rb"); while(fread(temp,sizeof(struct node_s),1,fp)==1) { i++; puts(temp->name); if(ReadNumFlag==0){ PNode head = NULL; head = createNode(); ReadNumFlag=1; } head->pnext=temp; temp->pnext=NULL; num++; } num=i; head = (PNode)malloc(sizeof(Node)); printf("这是 本地读取的条数!:%d\n",i); return(num); } void printUI(){ int i,j,k; system("cls"); system("color 75"); printf("\t\t\t**********************家庭财务管理系统*********************\n"); char str[]={"1:添加信息\n2:删除信息\n3:修改信息\n4:查询信息\n5:显示信息\n6:信息排序\n7:统计信息\n8:多项操作\n0:退出程序\n"}; char ModeName[10][1000]; int cnt=split(ModeName,str,"\n"); for(i=9;i>=1;i--){ printf("\t\t\t ");//初始化_每段 for(k=1;k<=9-i;k++){ printf(" "); } for(j=1;j<=i;j++){ printf("* "); } printf("\t"); printf("%s",ModeName[9-i]); printf("\t"); for(j=1;j<=i;j++){ printf("* "); } printf("\n");//尾端换行 } } void add_new(PNode head){ PNode node = NULL,temp = NULL; if(NULL==head)return;//这个情况基本不存在 node=(PNode)malloc(sizeof(Node)); printf("请输入姓名,第%d测试\n",num+1); scanf("%s",&node->name); printf("请输入时间,第%d项测试\n",num+1); scanf("%s",&node->date); printf("请输入收入,第%d项测试\n",num+1); scanf("%s",&node->earning); printf("请输入备注,第%d项测试\n",num+1); scanf("%s",&node->remarks); node->pnext=NULL;//尾部置NULL for(temp=head;temp->pnext!=NULL;temp=temp->pnext);//寻找最后节点,最后把temp作为最后一个节点 temp->pnext=node;//链接下一跳的头部 save(head); printf("\n\t\t\t\t 是否继续添加?[输入Y/N]:"); num++; //save(head); if (getch()=='y') add_new(head); else{ system("pause");/*跳出*/ } } void show_all(PNode head){ if(NULL==head)return;//这个情况基本不存在 PNode temp = head->pnext;//无法添加到for循环初始化中,除非用c99编译器【从非初始化项目,作为第一项!】 for(;temp!=NULL;temp=temp->pnext){ printf("【共%d条】姓名:%s,日期:%s,收入:%s,备注:%s\n",num,temp->name,temp->date,temp->earning,temp->remarks); } system("pause"); } void del_test(PNode *head,int n){//调用 del(&head,n); int i=0; PNode temp = NULL; if(NULL==head)return;//这个情况基本不存在 if(n==1){ temp=*head;//保存欲删除内存 *head=(*head)->pnext; num--; free(temp); } for(temp=*head,i=1;temp!=NULL;temp=temp->pnext,++i){ if(n==i+1){ PNode t = temp->pnext; temp->pnext = temp->pnext->pnext; free(t); num--; break; } } } void CheckMode(int icheckmode){//作用,当用户按下选项之后提示用户当前所选功能 switch(icheckmode){ case 1:printf("\t\t\t\t\t [添加信息]\n");break; case 2:printf("\t\t\t\t\t [删除信息]\n");break; case 3:printf("\t\t\t\t\t [修改信息]\n");break; case 4:printf("\t\t\t\t\t [查询信息]\n");break; case 5:printf("\t\t\t\t\t [显示信息]\n");break; case 6:printf("\t\t\t\t\t [信息排序]\n");break; case 7:printf("\t\t\t\t\t [统计信息]\n");break; case 8:printf("\t\t\t\t\t [多项操作]\n");break; case 0:printf("\t\t\t\t\t [退出程序]\n");break; default:{} } } main(){ int imode; PNode head = NULL; head = createNode(); for(;;){ printUI(); printf("\n\n\t\t===========================[%d]请输入您的选择[%d]=============================\n\n\t\t\t\t\t\t ",read(head),read(head)); scanf("%d",&imode); CheckMode(imode); switch(imode){ case 1:add_new(head);break; //case 2:del();break; //case 3:update();break; //case 4:search();break; case 5:show_all(head);break; //case 6:sort();break; //case 7:countitem();break; //case 8:more();break; case 0:printf("\n\t\t\t [ Honey,I have always been with you ]\n");exit(0); default:{ printf("重新输入!\n"); system("pause"); getchar(); } } } }