Ayuda urgente en programacion

Hola a todos, bueno el caso esque necesito hacer un programa en el que borrar un registro en un fichero y no tengo ni idea de como hacerlo, haber si alguien me puede ayudar.

el lenguaje es C, el programa que uso es el borland y es en consola.

gracias
Con esas pistas...
el fichero es de texto o binario?
Como es el registro?

Porque el programa está claro: leer el fichero copiandolo de nuevo sobre sí mismo, hasta que encuentres el registro en dicho caso no lo copias, y así hasta EOF
el fichero de tipo binario y el una estructura tengo 4 variables de personas que son las que tengo que borrar
Entonces tienes que abrirlo como binario y con fread tienes que ir leyendo sizeof(estructura) hasta que encuentres la que quieres borrar.

(Suponiendo que en el fichero solo puede haber estructuras de ese tipo, claro)
jorcoval escribió:#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct{
char nombre[41];
int unidades, pedidos;
float precio;
}producto;

main(){
producto datos;
FILE *f,*f1;
char nombreborrar[41];
char borrar;
printf("Cual deseas borrar: ");
gets(nombreborrar);
/*-----------------------------------------------------------------------------*/
if((f=fopen("fichero.bin","rb+"))==NULL){ //Abre el fichero
printf("Error");
fflush(stdin);
getchar();
return 0;
}
else{
fread(&datos,sizeof(producto),1,f);
while(!feof(f)){
if(strcmp(nombreborrar,datos.nombre)==0){
printf("\nNombre: %s",datos.nombre);
printf("\nUnidades: %d",datos.unidades);
printf("\nPrecio: %2.f",datos.precio);
printf("\nPedidos: %d",datos.pedidos);
printf("¿Deseas borrarlo? <S/N> %c");
fflush(stdin);
scanf("%c",&borrar);
if((borrar=='S')||(borrar=='s')){
fread(&datos,sizeof(producto),1,f);
}
else{
fwrite(&datos,sizeof(producto),1,f1);
}
}
else{
fwrite(&datos,sizeof(producto),1,f1);
}
}
}
fclose(f); //Cierra el Fichero
fclose(f1);
/*-----------------------------------------------------------------------------*/
rename("fichero.bin","nuevo.bin");
remove("fichero.bin");
puts("");
system("PAUSE");
}


Asi lo llevo de momento, lo que pasa me da un fallo y no se porque, haber si me puedes ayudar
f1 no se abre en ningún momento:

-no encuentra el registro: peta porque estás cerrando un puntero a fichero no declarado
-encuentra el registro: peta porque estás escribiendo sobre un fichero no declarado
jorcoval escribió:f1 no se abre en ningún momento:

-no encuentra el registro: peta porque estás cerrando un puntero a fichero no declarado
-encuentra el registro: peta porque estás escribiendo sobre un fichero no declarado


Muchas gracias yo lo termine, la verdad nose como no habria el f1 si es de logica

gracias
En todo caso esto iria en PC - General ;)
kurras escribió:En todo caso esto iria en PC - General ;)


No estaba seguro de donde iria, gracias por avisarme
Tision escribió:
jorcoval escribió:f1 no se abre en ningún momento:

-no encuentra el registro: peta porque estás cerrando un puntero a fichero no declarado
-encuentra el registro: peta porque estás escribiendo sobre un fichero no declarado


Muchas gracias yo lo termine, la verdad nose como no habria el f1 si es de logica

gracias

Porque muchas veces se comete un error muy tonto y que encima sabes hacerlo perfectamente, pero luego no lo ves por mucho que mires. Y lo mira otra persona y en plis lo detecta.

Me ha pasado cientos de veces tanto en la carrera como en el trabajo [carcajad]
9 respuestas