如何在使用fgets()读取一行后返回上一行的开头?

时间:2016-01-18 22:11:53

标签: c file io

例如,如果文件包含:

12345
-3445654
1245646

我想使用fgets()将第一行读入字符串。然后我想阅读第二行,检查第一个点是否有'-'。如果有,我会读第二行,strcat到第一行。

然后我想再次使用fgets()读取第三行。这次没有'-'时我只想让文件回到第三行的开头,以便下次调用fgets()时它会再次读取相同的第三行。

我有办法做到这一点吗?

3 个答案:

答案 0 :(得分:1)

使用fgetc读取下一行的第一个字符,如果它不是' - ',请使用ungetc将其放回。

答案 1 :(得分:1)

一般情况下,您只需将文件的一部分保留在内存中,直到您确定不再需要它为止。

或者您可以将整个文件读入缓冲区,然后根据需要使用指针跳转它。

或者,如果你真的必须,你可以使用fseek更多当前流位置,然后重新阅读你需要的部分。

答案 2 :(得分:0)

每当我想要

  1. 读一行
  2. 阅读第二行
  3. 也许会做涉及第一行和第二行的事情
  4. 我通常做的是声明第二个持线变量

    char prevline[whateversize];
    

    然后,介于步骤1和步骤2之间

    strcpy(prevline, line);
    

    (当然,您必须确保lineprevline变量一致地分配,例如作为相同大小的数组,以便溢出不是问题。)