De todas maneras estas usando un archivo txt, y lo que se suele usar en estos casos es un archivo .dat, no se si esto puede dar algun problema, o vale igualmente
Al parecer te has topado con el mismo problema que tuve hace tiempo con Turbo C. Nunca supe el porqué de los errores en los archivos binarios después de usar un scanf(...%s).La forma en que lo resolví fue deshaciendome completamente de scanf() e inventarme una función para leer cadenas de caracteres desde el teclado utilizando la función getch() (o sea, sin eco), y se acabaron mis problemas... de hecho jamas volvi a usar scanf() despues de eso.
Supongo que habra varias maneras de hacerlo ...Yo lo haria de esta forma:- Una vez introducido el registro a borrar, vas leyendo mediante fread y preguntando si el fichero leido es el que quieres borrar- Cuando lo encuentres , guardas la posicion del puntero al archivo en una variable (mediante la funcion ftell)- Mediante la funcion fseek mueves el puntero 1 registro adelante y despues lees los registros desde ese punto hasta el final, guardandolos en unas estructuras auxiliares- Finalmente haces otro fseek desde el inicio del archivo hasta la posicion que guardaste con el ftell, y sobreescribes los registros que guardaste en el paso anterior.Al final te quedara un registro repetido (el ultimo),supongo que se podra borrar escribiendo una estructura vacia sobre el ( no estoy seguro)