Fiz um program de cadastro de livros em C usando arquivos em disco. Mas estou com problemas pra implementar uma função que "apague" um registro do arquivo.  A função recebe uma string(nome do livro), dae tenho que procurar o nome do livro no arquivo e se achar, deletar na seguinte ordem:  deletar linha 1 - NOME do livro encontrado deletar linha 2 - GENERO do livro encontrado deletar linha 3 - AUTOR do livro encontrado  Mas não to conseguindo fazer...alguém pode me ajudar??  (Não é exercício de faculdade ou curso, é um programa que estou tentando fazer por conta pra aprender e outras coisas mais)  Tentei fazer a função para apagar arquivos do disco mas não esta dando certo. Cadas registro ocupa 3 linhas sendo o nome na primeira linha, o genero na segunda linha e o autor na terceira linha. Dae se eu achar um nome de livro igual ao que o usuário quer apagar, eu deleto as 3 linhas ligadas ao nome do livro encontrado. Função que tentei implementar:   void apagar_livro( char FLivro[TAM] )
{
   FILE *estrutura;
   estrutura = fopen("banco.txt","a");
   char Temporaria[TAM];
   char *Vazio = " ";
   int Deletou = 0;
   long teste;
   while ( (fscanf(estrutura," %s",Temporaria)) != EOF )
   {
      if (!strcmp(Temporaria,FLivro))
      {
         fprintf(estrutura,"%s",Vazio); // apaga nome
         fprintf(estrutura,"%s",Vazio); // apaga genero
         fprintf(estrutura,"%s",Vazio); // apaga autor
         printf("\n Livro apagado com sucesso");
         system("pause>nul");
         Deletou = 1;
      }
      else
      fscanf(estrutura,"\n");
   }
   if ( Deletou == 0 )
   {
      printf("\n Livro \" %s \" não foi deletado",FLivro);
      system("pause>nul");
   }
   
   system("cls");
   fclose(estrutura);
}
E tenho uma dúvida: a função fscanf quando trabalha com um while e EOF, como no exemplo abaixo, sozinha com o loop ela passa de linha cada vez que é chamada? Ex:
while ( (fscanf(estrutura," %s",Temporaria)) != EOF )
E o código completo do meu cadastro de livro. É coisa simples q estou fazendo, mas estou com problema na parte de deletar os registros
#include <stdio.h>
#define TAM 30
// Função que insere registros no arquivo
void inserir_dados(char FNome[TAM],
                   char FGenero[TAM],
                   char FAutor[TAM])
{
   // cria um arquivo de ponteiro
   FILE *estrutura;
   // abre o arquivo para inserção
   // se não houver arquivo cria-se, senão é inserido ao final do arquivo
   // um novo registro
   estrutura = fopen("banco.txt","a");
   // grava no arquivo nome do livro e pula uma linha
   fprintf(estrutura,"%s\n",FNome);
   // grava no arquivo o genero do livro e pula uma linha
   fprintf(estrutura,"%s\n",FGenero);
   // grava no arquivo o autor do livro e pula uma linha
   fprintf(estrutura,"%s\n",FAutor);
   // escreve na na tela o que foi inserido
   fprintf(stdout,"\n Livro: %s"
                  "\n Genero: %s"
                  "\n Autor: %s"
                  "\n Cadastro inserido corretamente\n",FNome,FGenero,FAutor);
   // aguarda uma tecla
   getchar();
   getchar();
   system("cls");
   // fecha o arquivo
   fclose(estrutura);
}
void pesquisar_livro( char FNomePesquisa[TAM] )
{
   // cria um ponteiro de arquivo
   FILE *estrutura;
   // ponteiro para guardar uma string lida do arquivo
   char Temporaria[TAM];
   // variaveis correspondentes a campos do cadastro de um livro
   char FGenero[TAM],   // armazena genero do arquivo a ser lido
        FAutor[TAM];    // armazena autor do arquivo a ser lido
   // variavel que serve pra chegar se achou registro ou não
   int Leu = 0;
   // abre o arquivo para leitura
   estrutura = fopen("banco.txt","r");
   // pega a linha atual e analisa se é final de arquivo
   // se não for final de arquivo, compara com a string passada para pesquisa
   while ( (fscanf(estrutura," %s",Temporaria)) != EOF )
   {
      // se a linha do nome do livro atual for igual à da pesquisa
      if (!strcmp(Temporaria,FNomePesquisa))
      {
         // imprime nome que esta na primeira linha lida do arquivo
         fprintf(stdout,"Nome: %s",Temporaria);
         // pula uma linha no arquivo e armazena o genero do livro
         fscanf(estrutura,"\n%s",FGenero);
         // imprime o genero do livro atual
         fprintf(stdout,"\nGenero: %s",FGenero);
         // pula uma linha no arquivo e armazena o autor do livro
         fscanf(estrutura,"\n%s",FAutor);
         // imprime o autor do livro atual
         fprintf(stdout,"\nAutor: %s\n",FAutor);
         // pula uma linha para ir para o próxima registro
         fscanf(estrutura,"\n");
         
         // 1 = Indica que foi encontrado livro
         // 0 = Indica que não foi encontrado livro
         Leu = 1;
      } 
      // se não encontrar no registro atual,
      else
      {
         // pula uma linha
         fscanf(estrutura,"\n");
      }
   }
      
      // checa se encontrou registro
      // se não encontrou, mostra mensagem
      if ( Leu == 0 )
      {
         printf("\n Registro não encontrado.");         
      }
      // aguarda pressionar uma tecla
      getchar();
      getchar();
      system("cls");
      // fecha o arquiivo
      fclose(estrutura);
  
}
void apagar_livro( char FLivro[TAM] )
{
   FILE *estrutura;
   estrutura = fopen("banco.txt","a");
   char Temporaria[TAM];
   char *Vazio = " ";
   int Deletou = 0;
   long teste;
   while ( (fscanf(estrutura," %s",Temporaria)) != EOF )
   {
      if (!strcmp(Temporaria,FLivro))
      {
         fprintf(estrutura,"%s",Vazio); // apaga nome
         fprintf(estrutura,"%s",Vazio); // apaga genero
         fprintf(estrutura,"%s",Vazio); // apaga autor
         printf("\n Livro apagado com sucesso");
         system("pause>nul");
         Deletou = 1;
      }
      else
      fscanf(estrutura,"\n");
   }
   if ( Deletou == 0 )
   {
      printf("\n Livro \" %s \" não foi deletado",FLivro);
      system("pause>nul");
   }
   
   system("cls");
   fclose(estrutura);
}
int main()
{
   // variaveis do main
   char Nome[TAM],
        Genero[TAM],
        Autor[TAM];
   int Opcao;
   do{
   // menu principal
   printf("\n Cadastro de Livros vers. 1.0");
   printf("\n 1 - Cadastra Livro");
   printf("\n 2 - Pesquisar Livro");
   printf("\n 3 - Apagar registro");
   printf("\n 4 - Sair");
   printf("\n Opcao:  ");
   scanf(" %d",&Opcao);
   switch ( Opcao )
   {
      case 1: // Cadastrar nome
      {
         printf("\n Entre com o nome do livro: ");
         scanf(" %s",Nome);
         printf("\n Entre com o genero do livro: ");
         scanf(" %s",Genero);
         printf("\n Entre com o autor do livro: ");
         scanf(" %s",Autor);
      
         // chama função para cadastrar os livros
         inserir_dados (Nome,Genero,Autor);         
      } break;
      case 2:
      {
         printf("\n Qual o nome do livro que deseja pesquisar? ");
         printf("\n Pesquisar: ");
         scanf(" %s",Nome);
         // chama função pesquisar passando o nome do livro como argumento
         pesquisar_livro(Nome);
      } break;
      case 3:
      {
         printf("\n Digite o nome do livro a ser deletado do arquivo");
         printf("\n Deletar: ");
         scanf(" %s",Nome);
         apagar_livro(Nome);
      } break;
      case 4:
      {
         printf("\n Encerrando o programa...");
         system("pause>nul");
         exit(1);
      } break;      
      default:
      {
         printf("\n Entrou com opcao invalida");
         system("pause>nul");
         system("cls");
      }
   } } while ( (Opcao != 1) || (Opcao != 2) || (Opcao != 3) || (Opcao != 4) );
   return 0;
}  Espero que possam me ajudar.  Agradeço