| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 637 人关注过本帖
标题:[求助高手]如何确定文件结尾!!!!!!!!!
只看楼主 加入收藏
frank2014
Rank: 1
等 级:新手上路
帖 子:14
专家分:5
注 册:2010-1-16
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:2 
[求助高手]如何确定文件结尾!!!!!!!!!
1、结构体如下
struct student
{
    char num[10]; //学号
    char name[15];//姓名
    int cgrade;   //成绩
    int mgrade;
    int egrade;
    int total;   //总分
    float ave;    //平均分
    int mingci;    //名次
};

typedef struct node //节点
{
    struct student data;
    struct node *next;
}Node, *Link;

2、将数据链表保存到了文件c:\student中
3、如何将c:\student的数据读到链表中?????
    因为Vc的feof(fp)会在读取结尾的EOF之后才返回0,这样每次都会多分配一个结点空间
----------------------------------【程序】--------------------------------------

下面是程序
void myfread(Link head, FILE *fp)
{
    Node *p1, *end = head;
    //end指针移到链表尾
    while (end->next)
    {
        end = end->next;
    }
    //文件为空,文件标识为0
    if (EOF==(c=fgetc(fp)))
        flagf = 0;
    rewind(fp);

    while (flagf && !feof(fp))
    {
        p1 = (Link)malloc(sizeof(Node));
        if (!p1)
        {
            printf("\n allocate memory failure!\n");
            return ;
        }

        if(1 == fread(p1, sizeof(Node), 1, fp));
        {
            end->next = p1;
            p1->next = NULL;
            end = p1;
            count++;
        }
    }
}
-----------------------------------【结果】-------------------------------------------
        ===================STUDNET======================
        | number | name |Clanguage|Math|Eng| sum | ave |
        ------------------------------------------------
        |    1   |Frank |   99    |   99   | 198 |  99 |
        ------------------------------------------------
        |    2   | Tom  |   98    |   98   | 196 |  98 |
        ------------------------------------------------            -----------------------------------------------
        |屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯|屯屯屯屯屯屯屯屯屯       由于feof要等EOF读出才置位,所以多分配了一个结点
        |-84324121|-832718
        -------------------------------------------------           -----------------------------------------------

-----------------------------------【最终解决】--------------------------------------
int MyRead(Link head, FILE *fp)
{
    Node *p, *end;
    int count = 0;
    end = head;

//文件不为空,读入数据,返回读入的记录个数
   
    //进入循环,只要没有到文件尾
    while(!feof(fp))
    {
        //分配节点,检验,结尾
        p = (Link)malloc(sizeof(Node));
        if (!p)
        {
            fflush(stdin);
            printf("内存分配失败!\n\n");
            getchar();
            return -1;
        }

        //end指向尾结点
        while (end->next)
        {
            end = end->next;
        }

        //读取一个数据到节点p
        if (0==(fread(p, sizeof(Node), 1, fp)))
        {
            fflush(stdin);
            printf("文件读取完毕, O(∩_∩)O哈哈~\n\n");   //因为每次读取一个节点,所以最后文件读取会失败
            getchar();                                    //也就是独到最后不能读出一个节点fread()函数会返回0
            return count;                                 //这样就可以作为文件结尾的标志了
        }

        p->next = NULL;
        //p接到end后,end=p
        end->next = p;
        end = p;
        count ++;
    }
    return count;
}

[ 本帖最后由 frank2014 于 2010-6-29 15:19 编辑 ]
搜索更多相关主题的帖子: 结尾 文件 
2010-06-27 14:59
skyuser213
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:37
专家分:117
注 册:2010-5-9
收藏
得分:20 
程序代码:
        if(1 == fread(p1, sizeof(Node), 1, fp));
        {
            if (p1 != EOF)
            {
              end->next = p1;
              p1->next = NULL;
              end = p1;
              count++;
            }
        }
2010-06-27 15:22
frank2014
Rank: 1
等 级:新手上路
帖 子:14
专家分:5
注 册:2010-1-16
收藏
得分:0 
回复 2楼 skyuser213
        if(1 == fread(p1, sizeof(Node), 1, fp));
        {
            if (p1 != EOF)
            {
              end->next = p1;
              p1->next = NULL;
              end = p1;
              count++;
            }
        }
---------------------------------------------------------------
p1的类型是Node *,那么p1!=EOF是什么意思,至少p1!=NULL吧 是不是你打错了??
测试之后问题依旧~~~  呵呵 希望能再指点一下

[ 本帖最后由 frank2014 于 2010-6-27 18:45 编辑 ]
2010-06-27 18:44
快速回复:[求助高手]如何确定文件结尾!!!!!!!!!
数据加载中...
 
   



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

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