Gracias por la explicacion, me fue muy util.
Ahora me surge un problema con dos funciones de mi programa, se supone que deben borrar y modificar en una estructura, pero no funcionan y no se porque es. Me podeis ayudar?? Gracias
Las pego.
void modificar (biblio libro)
{
FILE *f;
int codigo;
int op;
char univ[20];
do{
clrscr();
gotoxy(21,3);
textcolor(1);
cprintf("ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»");
gotoxy(21,4);
cprintf("º º");
textcolor(2);
gotoxy(26,4);
cprintf("MODIFICAR");
textcolor(1);
gotoxy(21,5);
cprintf("ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ");
textcolor(3);
gotoxy(21,8 );
cprintf(" 1. Por codigo");
gotoxy(21,9);
cprintf(" 2. Por Universidad");
gotoxy(21,10);
cprintf(" 3. Volver al Menu Principal");
gotoxy(21,11);
cprintf("Introduzca una opcion: ");
op=getch();
switch (op){
case '1':
if ((f=fopen("biblio.dat","r+b"))==NULL){
printf ("Error al abrir el fichero\n");
exit (0);
}
clrscr();
gotoxy (4,3);
printf ("Introduce el codigo del libro para modificar: \n");
gotoxy (4,4);
scanf ("%d",&codigo);
fread(&libro,sizeof(libro),1,f);
if (feof(f)){
printf ("No se ha encontrado el codigo introducido");
break;}
else{
if (codigo==libro.codigo){
clrscr();
gotoxy (4,3);
cprintf ("Introduce el nuevo titulo: \n");
gotoxy (4,4);
gets (libro.titulo);
gotoxy (4,5);
cprintf ("Introduce el nuevo autor: \n");
gotoxy (4,6);
gets (libro.autor);
gotoxy (4,7);
cprintf ("Introduce la nueva universidad: \n");
gotoxy (4,8 );
gets (libro.uni);
fwrite (&libro,sizeof(libro),1,f);}
}
fclose(f);
break;
case '2':
if ((f=fopen ("biblio.dat","r+b"))==NULL){
printf ("Error al abrir el fichero\n");
exit (0);
}
clrscr();
gotoxy (4,3);
cprintf ("Introduce la universidad para modificar: \n");
gotoxy (4,4);
gets (univ);
fread (&libro, sizeof (libro),1,f);
if (feof(f)) {
printf ("No se ha encontrado la universidad");
break;}
else{
if (univ==libro.uni){
clrscr();
gotoxy (4,3);
printf ("Introduce el nuevo titulo: \n");
gets (libro.titulo);
gotoxy (4,4);
printf ("Introduce el nuevo autor: \n");
gets (libro.autor);
gotoxy (4,5);
printf ("Introduce la nueva universidad: \n");
gets (libro.uni);
fwrite (&libro,sizeof(libro),1,f);
}
}
fclose (f);
break;
case '3':
break;
default:
textcolor(4);
gotoxy(45,14);
cprintf("Opcion incorrecta");
textcolor(3);
sleep(1);
break;
}//switch
}while (op!='3');
}
//--------------funcion borrar-----------------
void borrar(int cod)
{
FILE *f,*f1;
biblio libro;
int ok;
if ((f=fopen("biblio.dat","r"))==NULL){
printf ("Error en la apertura del fichero\n");
exit (0);
}
if ((f1=fopen("temporal.dat","w"))==NULL){
printf ("Error en la apertura del fichero\n");
exit (0);
ok=0;
while(1){
fread(&libro,sizeof(libro),1,f);
if (feof(f))
break;
else
if(cod!=libro.codigo)
fwrite (&libro,sizeof(libro),1,f1);
else
ok=1;
}
if(!ok&&feof(f)){
cprintf ("El codigo introducido no existe\n");
sleep (2);}
else
if(ok){
fclose(f);fclose(f1);
remove("biblio.dat");
rename("temporal.dat","biblio.dat");
}
getch();
}
}