| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4809 人关注过本帖
标题:前辈来指导一下 链表写入文件的问题
只看楼主 加入收藏
lukunstriker
Rank: 2
等 级:论坛游民
帖 子:22
专家分:20
注 册:2010-3-29
结帖率:85.71%
收藏
已结贴  问题点数:10 回复次数:2 
前辈来指导一下 链表写入文件的问题
写好了链表,想把链表存到文件中 以便于调用 怎么写?我用fwrite写了 可是文件里是乱码!希望前辈给指导指导 感激不尽!
链表创建没有问题 关键是写入的那一块
如果我的这个实在是牛头不对马嘴,那请写个正确的让我研究研究 谢谢了
#include <stdio.h>
#include <stdlib.h>
#define NULL 0
#define LEN sizeof(struct student)
typedef struct student
{
    long num; /*学号*/
    float score; /*分数*/
    struct student *next; /*指向下一节点的指针*/
}node;

int n; /*节点总数*/

node *Create();/*链表创建函数*/
void Link_file(node *head);/*写入函数*/




void main()
{
    node *temp;
    temp = Create();
    Link_file(temp);
    return;
}


node *Create()
{
    node *head; /*头节点*/
    node *temp=NULL; /*temp保存创建的新节点的地址*/
    node *tail=NULL; /*tail保存原链表最后一个节点的地址*/

    n = 0; /*创建前链表的节点总数为0:空链表*/
    temp = (node *)malloc(LEN); /*开辟一个新节点*/
    tail = temp; /*如果节点开辟成功,则tail先把它的指针保存下来以备后用*/

    if (temp== NULL) /*节点开辟不成功*/
        {
            printf("\n创建失败,请稍后再试!\n");
            return NULL;
        }
    else /*节点开辟成功*/
        {
            head = NULL; /*开始head指向NULL*/
            printf("请输入第%d个节点 -- num,score: ",n+1);
            scanf("%ld,%f",&temp->num,&temp->score); /*录入数据*/
        }
 
    while(temp->num != 0) /*只要学号不为0,就继续录入下一个节点*/
        {
            n += 1; /*节点总数增加1个*/

            if (n==1) /*如果节点总数是1,则head指向刚创建的节点temp*/
                {
                    head = temp;
                    tail->next = NULL;
                }
            else
                tail->next = temp; /*指向上衣循环刚开辟的节点*/
               

            tail = temp; /*把temp的地址给tail保留,然后temp去产生新节点*/
  
            temp= (node *)malloc(LEN);
            printf("请输入第%d个节点 -- num,score: ",n+1);
            scanf("%ld,%f",&temp->num,&temp->score);
        }
    tail->next = NULL;
 
    free(temp); /*释放temp*/
    temp = NULL; /*把释放的变量清空置为NULL。。*/
    return head; /*返回创建链表的头指针*/
}


void Link_file(node *head)
{
    node *p;
    FILE *fp;
    p = head;
   
    if((fp=fopen("e:\\c++\\In_Out\\Link_file.txt","wb+"))==NULL)/*我的文件所在地*/
        {   
            printf("打开失败!");
            exit(0);
        }

   

    while(p!= NULL)         
        {
            fwrite(p,LEN,1,fp);
            p=p->next;
               
        }

    fclose(fp);
    return;
}
搜索更多相关主题的帖子: 链表 前辈 文件 指导 
2010-05-09 16:51
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:7 
输入到文本文件中应该用 sprintf ,而不应该用 fwrite.另外 scanf 中括号最好不加逗号,用空格比较好.

    其它没发现什么,欢迎高手指出另外的错误.
2010-05-09 19:10
lukunstriker
Rank: 2
等 级:论坛游民
帖 子:22
专家分:20
注 册:2010-3-29
收藏
得分:0 
再来几个高手说说啊
2010-05-10 21:31
快速回复:前辈来指导一下 链表写入文件的问题
数据加载中...
 
   



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

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