标题:一个关于读取文件中数据的问题,请大神指教
只看楼主
米线儿
Rank: 2
等 级:论坛游民
威 望:1
帖 子:35
专家分:54
注 册:2015-3-28
结帖率:87.5%
已结贴  问题点数:20 回复次数:3 
一个关于读取文件中数据的问题,请大神指教
我的目的是想要从文件中读取160位的数据储存在一个数组当中,经过计算之后,往后挪一位再取160位依然存储在同一个数组当中,就是说如果刚开始指针指向的是0位,然后开始取160位的话,第二次我是想从1位开始取取160位,第三次从2位开始取,一直到满足我的条件为止。

FILE *fp2;
fp2 = fopen(s_arg_p->filename, "r");

我可以取一个while循环,然后直接通过fp2++的语句实现这个吗? 希望各位大神能明白我这混乱的描述并指教下小菜鸟。

非常感谢!
搜索更多相关主题的帖子: 小菜 
2015-06-16 02:26
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
可以(通过fseek或fsetpos实现,但最好以二进制方式打开),但这么做执行效率很差,你应该:

读取159位;
for( ;读1位;舍弃159位的最前一位并尾部接上新读的1位)
{
    处理这 159位+1位;
}

// 开个160位的数组就行了,删一位加一位时不要移动数组内元素,而是设个队列开始指针。
2015-06-16 09:52
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
一个Demo

程序代码:
#include <stdio.h>

#define N 5

int main( void )
{
    FILE* f = fopen( "test.txt", "rb" ); // 内容为 abcdefg
    if( !f )
        return 1;

    char buf[N];
    if( N-1 == fread(buf,1,N-1,f) )
    {
        size_t buf_p = N-1;
        for( ; 1==fread(buf+buf_p++,1,1,f); buf_p%=N )
        {
            // 输出这N个字符
            for( size_t i=0; i!=N; ++i )
                printf( "%c", buf[(buf_p+i)%N] );
            printf( "\n" );
        }
    }

    fclose( f );
    return 0;
}

输出:
abcde
bcdef
cdefg
2015-06-16 10:11
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
得分:0 
楼主说的读一位是这个意思?
2015-06-16 12:18



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




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

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