Проблема при чтении определенной части файла

Я пытаюсь извлечь и напечатать определенную часть текста из файла в определенный момент времени. Я использовал ftell() и fseek() для достижения этой цели.

     #include <stdio.h>     //// include required header files
     #include <string.h>

     int main()
   {
       FILE *fp = fopen("myt", "w+");

        if (fp == NULL)     //// test if file has been opened sucessfully
        {
         printf("Can't open file\n");
         return 1;         //// return 1 in case of failure
        }


    char s[80];
    printf("\nEnter a few lines of text:\n");

    while (strlen(gets(s)) > 0)  //user inputs random data
     {                                     //till enter is pressed
       fputs(s, fp);
       fputs("\n", fp);
     }

    long int a = ftell(fp);
    fputs("this line is supposed to be printed only ", fp);//line to be
                                                           // displayed
    fputs("\n", fp);

    fputs("this line is also to be printed\n",fp);         //line to be 
                                                           //displayed
    fputs("\n",fp);

    long int b = ftell(fp);

    fputs("this is scrap line",fp);
    fputs("\n",fp);

    rewind(fp);
    fseek(fp, a, SEEK_CUR);  //move to the starting position of text to be
                             //displayed

    long int c=b-a;          //no of characters to be read
    char x[c];
    fgets(x, sizeof(x), fp); 
    printf("%s", x);

   fclose(fp);

   return 0;   //// return 0 in case of success, no one
  }

Я попытался использовать этот подход, но программа просто печатает первую строку. Вывод выглядит следующим образом:

         this line is supposed to be printed only

Я хочу напечатать обе строки, предназначенные для печати. ​​Пожалуйста, предложите подход.

1 ответ

Решение

Я думаю, что ваше намерение для чтения части было

rewind(fp);
fseek(fp, a, SEEK_CUR);  //move to the starting position of text to be
                         //displayed

long int c=b-a;          //no of characters to be read
char x[c+1];

int used = 0;
while(ftell(fp) < b)
{
  fgets(x+used, sizeof(x)-used, fp);
  used = strlen(x);
}
printf("%s", x);

Заметки:

  • Я добавил +1 к распределению вашего буфера x так как fgets добавляет нулевое завершение

  • Я не уверен на 100%, что ты не хочешь fflush(fp) между записью и чтением.

Другие вопросы по тегам