标题:关于链表的建立
只看楼主
小菜小C
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:70
专家分:111
注 册:2011-3-18
得分:0 
回复 10楼 voidx
试过了,不行。。。

菜鸟一名,准备起飞
2011-06-06 22:42
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
请上代码~
2011-06-06 22:57
小菜小C
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:70
专家分:111
注 册:2011-3-18
得分:0 
回复 12楼 voidx
fwrite(p,sizeof(struct connection),1,ps1);//这个是用这个写的
fread(p,sizeof(struct connection),1,ps1);//这个是读的

菜鸟一名,准备起飞
2011-06-07 22:52
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
这个,如果你的 p 是结构体指针,ps 是流指针,那么你的这两条语句没问题,其他的可能有问题
2011-06-07 22:57
qldxsun
Rank: 4
等 级:业余侠客
帖 子:125
专家分:240
注 册:2011-6-4
得分:0 
回复 5楼 小菜小C
1、链表链表,肯定是lined的啊!
2、从文件读取的方式有很多,自己去找c语言的书看,各个函数的用法也不一样
3、建议你先把表结构(链表)等知识好好看一看。。。如果表结构搞不懂或者不懂不懂后面的数、图基本上很难搞懂!
2011-06-07 23:07
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
回复 15楼 qldxsun
啥叫 lined ?
2011-06-07 23:24
小菜小C
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:70
专家分:111
注 册:2011-3-18
得分:0 
回复 14楼 voidx
没问题,是写到文件里的,但在文件里是一组乱码。而读出的时候也是乱码,老是出现“屯”,一大堆

菜鸟一名,准备起飞
2011-06-08 11:47
小菜小C
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:70
专家分:111
注 册:2011-3-18
得分:0 
回复 15楼 qldxsun
我链表已建好,但是在存到文件重视用存数据块的方式存储,但存进去后发现存的是一堆乱码,就是“屯”这个东西,读出的时候和这个是一样的

菜鸟一名,准备起飞
2011-06-08 11:49
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
把完整代码贴一下。
你用 二进制 方式写文件,然后用记事本之类的东西打开写入的文件肯定是乱码啊~
2011-06-08 13:06
小菜小C
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:70
专家分:111
注 册:2011-3-18
得分:0 
回复 19楼 voidx
struct connection *open(FILE *ps1,struct connection *head,struct connection *p)                      //读取历史记录
{
    struct connection *s;
    p=head;
    while(fgetc(ps1)!=EOF)
    {
         s=(struct connection*)malloc(sizeof(struct connection));
         p->next=s;
         fscanf(ps1,"%d%s%s%s%s",&p->number,&p->name,&p->adress,&p->tphone,&p->qq);
         p=s;
    }
    p->next=NULL;
    return head;
}
void os(FILE *ps,FILE *ps1,struct connection *head,struct connection *p)                            //写进文件里
{
    rewind(ps);
    rewind(ps1);
    p=head->next;
    fprintf(ps,"\t****************************************************\n");
    fprintf(ps,"编号\t\t名字\t\t地址\t\t电话或联系方式\t\tQQ号\n");
    while(p!=NULL)
    {
        fprintf(ps1,"%d %s %s %s %s ",p->number,p->name,p->adress,p->tphone,p->qq);               
        fprintf(ps,"%d %18s %18s %18s %18s\n",p->number,p->name,p->adress,p->tphone,p->qq);
        p=p->next;
     }
    fprintf(ps,"******************************************************\n");
    printf("保存成功!\n");
}
void display(struct connection *head,struct connection *p)                            //显示通讯录
{
    p=head->next;
    printf("\t****************************************************\n");
    printf("编号\t\t名字\t\t地址\t\t电话或联系方式\t\tQQ号\n");
    while(p!=NULL)
    {
        printf("%d %18s %18s %18s %18s\n",p->number,p->name,p->adress,p->tphone,p->qq);
        p=p->next;
    }
    if(p==NULL)
    {
        printf("待添加..................\n");
    }
    printf("******************************************************\n");
}
void main()
{
    FILE *ps,*ps1;
    char c;
    if((ps=fopen("通讯录.txt","w+"))==NULL)
    {
         printf("error");
         exit(0);
    }
    printf("是否要导入以前的历史记录: y/n \n");
    fflush(stdin);
    c=getchar();
    if(c=='y')
    {
        printf("成功了!\n");
        if((ps1=fopen("通讯录历史.test","rb+"))==NULL)
        {
            printf("没有记录!\n");
            exit(0);
        }
        int m;
        struct connection *p,*head,*q;
        head=(struct connection*)malloc(sizeof(struct connection));
        head=open(ps1,head,p);
        p=head;
}
不用看后面,看前面的子函数,即使这样实现的存储,使用rb的格式,求解

菜鸟一名,准备起飞
2011-06-08 21:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-341989-1-1.html




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

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