| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1060 人关注过本帖
标题:有关链表和文件的问题
取消只看楼主 加入收藏
忆馨亦伊
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-8-26
收藏
 问题点数:0 回复次数:1 
有关链表和文件的问题
这个题目是我们数据结构的课程设计,要求用链表实现英文图书管理系统,既图书的查询,添加,借阅等。。。但是要求能够从文件中读取数据并在操作完成后能够保存到文件中。请大家帮我看下为什么文件操作总是出现乱码。谢谢
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*结构体的定义,用于存放书籍及借书的信息。*/
struct book
{
  int id;
  char name[30],author[20];
  int user,days;
  struct book *next;
}books;
/* 从文件读数据*/
struct book *load()
{
struct book *p,*q,*h=NULL; /*定义记录指针变量*/
FILE *fp; /* 定义指向文件的指针*/
char infile[10]; /*保存文件名*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*输入文件名*/
if((fp=fopen(infile,"rb"))==NULL) /*打开一个二进制文件,为读方式*/
{
printf("can not open file\n"); /*如不能打开,则结束程序*/
exit(1);
}
printf("\n -----Loading file!-----\n");
p=(struct book *)malloc(sizeof(struct book)); /*申请空间*/
if(!p)
{
printf("out of memory!\n"); /*如没有申请到,则内存溢出*/
return h; /*返回空头指针*/
}
h=p; /*申请到空间,将其作为头指针*/
while(!feof(fp)) /*循环读数据直到文件尾结束*/
{
if(1!=fread(p,sizeof(struct book),1,fp))
break; /*如果没读到数据,跳出循环*/
p->next=(struct book *)malloc(sizeof(struct book)); /*为下一个结点申请空间*/
if(!p->next)
{
printf("out of memory!\n"); /*如没有申请到,则内存溢出*/
return h;
}
q=p; /*保存当前结点的指针,作为下一结点的前驱*/
p=p->next; /*指针后移,新读入数据链到当前表尾*/
}
q->next=NULL; /*最后一个结点的后继指针为空*/
fclose(fp); /*关闭文件*/
printf("---You have success read data from file!!!---\n");
return h; /*返回头指针*/
}

/*保存数据到文件*/
void save(struct book *h)
{
FILE *fp; /*定义指向文件的指针*/
struct book *p; /* 定义移动指针*/
char outfile[10]; /*保存输出文件名*/
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示文件名格式信息*/
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL) /*为输出打开一个二进制文件,如没有则建立*/
{
printf("can not open file\n");
exit(1);
}
printf("\nSaving file......\n"); /*打开文件,提示正在保存*/
p=h; /*移动指针从头指针开始*/
while(p!=NULL) /*如p不为空*/
{
fwrite(p,sizeof(struct book),1,fp);/*写入一条记录*/
p=p->next; /*指针后移*/
}
fclose(fp); /*关闭文件*/
printf("-----save success!!-----\n"); /*显示保存成功*/
getch();
} /*打印图书信息函数*/
void print_book(struct book *h)
{
        struct book *p;
        p=h;
        if(p==NULL)
        {
          printf("no books\n");
          getche();
        }
        else
        {
          printf("book info:\n");
          while(p!=NULL)
          {           
            printf("%d,%s,%s,%d,%d\n",p->id,p->name,p->author,p->user,p->days);   
            p=p->next;
          }
        }
        getche();
}

void main()
{
  struct book *head=NULL;
  struct book *h;
  char name[30];
  int id,i,user;
  head=load();
  print_book(head);
  save(head);
}
搜索更多相关主题的帖子: 链表 文件 
2008-09-08 19:42
忆馨亦伊
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-8-26
收藏
得分:0 
问题解决了,文件中信息保存有误。
2008-09-08 23:00
快速回复:有关链表和文件的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027852 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved