标题:函数中读取一个文件,如何在他的子函数中继续读取该文件
只看楼主
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
结帖率:93.75%
已结贴  问题点数:20 回复次数:2 
函数中读取一个文件,如何在他的子函数中继续读取该文件
int read_Checkerboard_List()         //读取棋盘文件列表
{
    FILE *get_qp_list=NULL;                  //获取棋盘列表

    int num_flag=1,num=1;                        //num_flag读取数据类别,num需要读取的个数
    char ch,filename[50];

    get_qp_list=fopen("./LIST/List.txt","r");   //显示文件列表

    if(num_flag==1)                             //查找nume的值
    {
        ch=fgetc(get_qp_list);                  //读取列表中name的值
        if(ch==list_flag.str_name[i])
            i++;
        else
            i=0;

        if(i==list_flag_num[1])
        {
            i=0;
            k++;
            printf("\n%3d.  ",k);
            do
            {
                ch=fgetc(get_qp_list);
                switch(ch)
                {
                    ...
                }
            }while(m==0);
            m=0;
            num_flag++;
        }
    }

    if(num_flag==2)
        num_flag=read_Checkerboard_List_Describe(....);         //读取棋盘文件列表描述文件
}

void read_Checkerboard_List_Describe(int num,int num_flag,char list_flag[20],int length)         
{
    int i=0,m=0;
    char ch;

    ch=fgetc(get_qp_list);               
    if(ch==list_flag[i])
        i++;
    else
        i=0;

    if(i==length)
    {
        i=0;
        printf("\t");
        do
        {
            ch=fgetc(get_qp_list);
            switch(ch)
            {
                ...
        }while(m==0);
        num_flag++;
    }

    return num_flag;
}

我在一个函数中定义了一个FILE指针get_qp_list,用以读取一个文件,我想在他的子函数中继续读取该文件,不是从头开始,而是接着主函数读取的地方继续读取,请教各问大神。该程序在一个函数中已经成功运行,现在想分成两个函数运行。
搜索更多相关主题的帖子: 函数 读取 文件 继续 int 
2019-07-29 19:24
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
你把  FILE *get_qp_list 传过去呀
2019-07-29 20:23
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:0 
回复 2楼 rjsp
我知道你的意思了,但是我如果只是传递指针,程序往下读取文件里的内容了。如果我在子函数里重新定义get_qp_list=fopen("./LIST/List.txt","r"); 那就是在子函数里重新读取文件了,和预期不相符。

int read_Checkerboard_List_Describe(FILE *get_qp_list,int num,int num_flag,char list_flag[20],int length);         //读取棋盘文件列表描述文件
int read_Checkerboard_List(void);           //读取棋盘文件列表

int read_Checkerboard_List()         //读取棋盘文件列表
{
    FILE *get_qp_list=NULL;                  //获取棋盘列表

    int i=0,j=0,k=0,m=0;
    int num_flag=0,num=4;                        //num_flag读取数据类别,num需要读取的个数
    char flag[]={"name == "};
    char ch,filename[50];

    get_qp_list=fopen("./LIST/List.txt","r");   //显示文件列表

    do
    {
        if(num_flag==0)                             //查找nume的值
        {
            ch=fgetc(get_qp_list);                  //读取列表中name的值
            if(ch==flag[i])
                i++;
            else
                i=0;

            if(i==8)
            {
                i=0;
                k++;
                printf("\n%3d.  ",k);
                do
                {
                    ch=fgetc(get_qp_list);
                    switch(ch)
                    {
                        ....
                    }
                }while(m==0);
                m=0;
                num_flag++;
            }
        }

        if(num_flag==1)
            num_flag=read_Checkerboard_List_Describe(get_qp_list,num,num_flag,"hang == ",8);         //读取棋盘文件列表描述文件
        if(num_flag==2)
            num_flag=read_Checkerboard_List_Describe(get_qp_list,num,num_flag,"lie == ",7);         //读取棋盘文件列表描述文件
        if(num_flag==3)
            num_flag=read_Checkerboard_List_Describe(get_qp_list,num,num_flag,"mine == ",8);         //读取棋盘文件列表描述文件

    }while(ch!=EOF);                               //ASCLL文件结束

}

int read_Checkerboard_List_Describe(FILE *get_qp_list,int num,int num_flag,char list_flag[20],int length)         //读取棋盘文件列表描述文件
{
    int i=0,m=0;
    char ch;

    ch=fgetc(get_qp_list);                  //读取列表中的值
    if(ch==list_flag[i])
        i++;
    else
        i=0;

    if(i==length)
    {
        i=0;
        printf("\t");
        do
        {
            ch=fgetc(get_qp_list);
            switch(ch)
            {
                ....
            }
        }while(m==0);
        num_flag++;
    }

    return num_flag;
}

[此贴子已经被作者于2019-7-30 10:53编辑过]


一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-07-30 10:51



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




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

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