如何使用while((c = getc(file))!= EOF)两次遍历文件?

时间:2018-02-27 21:32:11

标签: c

#include <stdio.h>

int main(int argc, char **argv) {
    int c;
    FILE *file;
    file = fopen(argv[1], "r");
    if (file) {

        while ((c = getc(file)) != EOF) {
            if (c == 'a') {
                // loops through this part of the file without breaking the 
                // the original c
            }
        }


    }
}

基本上,这个程序真的没有用,只是想知道是否有一种简单的方法在文件中循环两次。

比如说文件的内容是&#34; 1234a456468&#34;

当c在索引4时。我想在不影响c的情况下创建另一个循环,我们将调用另一个变量d,其中d也在索引4处,我可以使用d = getc(file)而不使用它影响c。

2 个答案:

答案 0 :(得分:6)

使用fseekftell

#include <stdio.h>

int main(int argc, char **argv) {
    int c;
    FILE *file;
    long remember_pos;
    file = fopen(argv[1], "r");
    if (file) {

        while ((c = getc(file)) != EOF) {
            remember_pos = ftell(file);
            if (c == 'a') {
                // loops through this part of the file without breaking the 
                // the original c
            };
            fseek(file, remember_pos, SEEK_SET);
        }
    }
}

手册页:https://www.freebsd.org/cgi/man.cgi?query=fseek

答案 1 :(得分:0)

查看命令fseek reference

它跳转到文件的开始/结束/当前位置的偏移量

跳转开始使用Capybara.current_session,相当于fseek(f, 0, SEEK_SET)