Проблема при чтении определенной части файла
Я пытаюсь извлечь и напечатать определенную часть текста из файла в определенный момент времени. Я использовал 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)
между записью и чтением.