Como puedo borrar un registro en C por completo

Estoy montando un programa en c que me permita dar de alta, baja, modificar o listar “libros”. El problema llega a la hora de dar de baja, ya que lo elimina pero no del todo, ya que deja una serie de 0 en el campo que le corresponde. Todos los demás requisitos (dar de alta, modificar, listar) funcionan, pero el dar de baja no como busco. Al dar de baja, el campo que coincida con el ISBN que le introduces debería de desaparecer por completo.

Adjunto código:

#include <stdio.h>
#include <stdlib.h>



typedef struct{
    char titulo (50);
    char autor (50);
    char editorial (50);
    int anyo;
    int isbn;
    int numero_paginas;
} biblioteca; 

void continuar (){
    printf("Presione una tecla para continua nn");
    getch();
}

void crear(){
    FILE *archivo;
    archivo = fopen ("Ejercicio22.txt", "wb");
    if (archivo == NULL)
        exit(1);
    fclose(archivo);
    continuar();
}

void listar(){
    
    FILE *archivo;
    archivo = fopen("Ejercicio22.txt", "rb");
    if (archivo == NULL)
        exit (1);
    biblioteca libro;
    fread(&libro, sizeof(biblioteca), 1, archivo);
    while(!feof(archivo)){
        printf("Titulo: %snAutor: %snEditorial: %snAnyo: %inIsbn: %inNumero_paginas: %inn", libro.titulo, libro.autor, libro.editorial, libro.anyo, libro.isbn, libro.numero_paginas);
        fread(&libro, sizeof(biblioteca), 1, archivo);
    }
    fclose(archivo);
    continuar();
}

void mostrar(){
    
    FILE *archivo;
    archivo = fopen("Ejercicio22.txt", "rb");
    if (archivo== NULL)
        exit(1);
    printf("Ingrese el ISBN del libro a consultar: ");
    int is;
    scanf("%i", &is);
    biblioteca libro;
    int existe = 0;
    fread(&libro, sizeof(biblioteca), 1, archivo);
    while(!feof(archivo)){
        if(is==libro.isbn){
            printf("Titulo: %snAutor: %snEditorial: %snAnyo: %inIsbn: %inNumero_paginas: %inn", libro.titulo, libro.autor, libro.editorial, libro.anyo, libro.isbn, libro.numero_paginas);
            existe=1;
            break;
        }
        fread(&libro, sizeof(biblioteca), 1, archivo);
    }
    if (existe==0){
        printf("No exite el libro con ese ISBNn");
    }
    fclose(archivo);
    continuar();
}

void alta(){
    FILE *archivo;
    archivo = fopen("Ejercicio22.txt", "ab");
    if(archivo == NULL)
        exit(1);
    fflush(stdin);
    biblioteca libro;
    printf("Ingrese el titulo del libro: ");
    gets(libro.titulo);
    printf("Ingrese el autor del libro: ");
    gets(libro.autor);
    printf("Ingrese la editorial: ");
    gets(libro.editorial);
    printf("Ingrese el anyo: ");
    scanf("%i", &libro.anyo);
    fflush(stdin);
    printf("Ingrese el ISBN: ");
    scanf("%i", &libro.isbn);
    fflush(stdin);
    printf("Ingrese el numero de paginas:");
    scanf("%i", &libro.numero_paginas);
    fwrite(&libro, sizeof(biblioteca), 1, archivo);
    fclose(archivo);
    continuar();
}

void baja(){
    FILE *archivo;
    archivo = fopen("Ejercicio22.txt", "r+b");
    biblioteca libro;
    int existe=0;
    if(archivo==NULL)
        exit(1);
    printf("Ingrese el ISBN del libro a eliminar: ");
    int is;
    scanf("%i", &is);
    fread(&libro, sizeof(biblioteca), 1, archivo);
    while(!feof(archivo)){
        if(is==libro.isbn){
            fflush(stdin);
            libro.anyo=NULL;
            libro.isbn=NULL;
            libro.numero_paginas=NULL;
            strcpy(libro.autor,"");
            strcpy(libro.editorial,"");
            strcpy(libro.titulo,"");
            int pos = ftell(archivo)-sizeof(biblioteca);
            fseek(archivo, pos, SEEK_SET);
            fwrite(&libro, sizeof(biblioteca), 1, archivo);
            printf("Se ha eliminado el libro con dicho ISBNn");
            existe=1;
            break;
        }
        fread(&libro, sizeof(biblioteca), 1, archivo);
    }
    if(existe==0)
        printf("No existe dicho libro con ese ISBNn");
    fclose(archivo);
    continuar();
}

void modificar(){
    FILE *archivo;
    archivo = fopen("Ejercicio22.txt", "r+b");
    if (archivo == NULL)
        exit(1);
    printf("Ingrese el ISBN del libro a modificar: ");
    int is;
    scanf("%i", &is);
    biblioteca libro;
    int existe= 0;
    fread(&libro, sizeof(biblioteca), 1, archivo);
    while(!feof(archivo)){
        
        if (is == libro.isbn){
            fflush(stdin);
            printf("Titulo: %snAutor: %snEditorial: %snAnyo: %inIsbn: %inNumero_paginas: %inn", libro.titulo, libro.autor, libro.editorial, libro.anyo, libro.isbn, libro.numero_paginas);
            printf("Ingrese un nuevo titulo: ");
            gets(libro.titulo);
            printf("Ingrese el autor del libro: ");
            gets(libro.autor);
            printf("Ingrese la editorial: ");
            gets(libro.editorial);
            printf("Ingrese el anyo: ");
            scanf("%i", &libro.anyo);
            fflush(stdin);
            printf("Ingrese el numero de paginas: ");
            scanf("%i", &libro.numero_paginas);
            int pos = ftell(archivo)-sizeof(biblioteca);
            fseek(archivo, pos, SEEK_SET);
            fwrite(&libro, sizeof(biblioteca), 1, archivo);
            printf("Se ha modificado el libro para dicho ISBNn");
            existe=1;
            break;
        }
        fread(&libro, sizeof(biblioteca), 1, archivo);
    }
    if(existe==0)
        printf("No existe dicho libro con ese ISBNn");
    fclose(archivo);
    continuar();
}
 
int main(int argc, char *argv()) {
    int opcion;
    
    
    do {
        printf("1 - Crear el archivon");
        printf("2 - Listar librosn");
        printf("3 - Mostrar un libron");
        printf("4 - Dar de alta un libron");
        printf("5 - Dar de baja un libron");
        printf("6 - Modificar datos de un libron");
        printf("7 - Salirnn");
        printf("Ingrese una  opcion: ");
        scanf("%i", &opcion);
        switch (opcion){
            case 1:
                crear();
                break;
                
            case 2:
                listar();
                break;
                
            case 3: 
                mostrar();
                break;
                
            case 4:
                alta();
                break;
                
            case 5:
                baja();
                break;
                
            case 6:
                modificar();
                break;
        }   
    }while(opcion!=7);
    
    
    return 0;
}

No se si alguien me puede indicar qué es lo que está fallando. Gracias