fichero binario(agenda)
Publicado por lest (1 intervención) el 09/04/2009 15:43:13
Buenas,estoy trabajando con ficheros, y he creado una agenda,previamente con ficheros normales de tipo texto( y funciona bien)
Ahora estoy con binarios, y me surgen problemas: introduzco un usuario,lo busco,y lo encuentra, introduzco el segundo,lo busco y lo encuentra,pero si vuelvo a buscar el primero no lo encuentra.
Es mas, si cierro el programa y lo vuelvo a ejecutar,no encuentra ninguno.
Me he estado descerebrando y no soy capaz de dar con el error, a ver si sois capaces de echarme 1 mano, os dejo el codigo.Gracias!!!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct funcion
{
char nombre[50];
int num;
};
int main()
{
FILE *f;
FILE *a;
char cad[50];
char nombre[50];
char apellido[50];
char telefono[50];
int contador=0;
int cont=1;
int i;
int pos=0;
int numelem=0;
int encontrado=0;
struct funcion x[50];
char opcion2='o';
int opcion=0;
while(opcion!=5)
{
switch (opcion)
{
case 0: system("mkdir c:\agenda");
break;
case 1: f=fopen("c:\agenda\agenda.dat","ab");
if((f==NULL))
{
printf("Upps!Error al abrir fichero :( ");
printf("Debe de crear el directorio ");
system("pause");
system("cls");
}
else
{
printf("Introduzca Nombre, Apellido y Telefono ");
scanf("%s %s %s",nombre,apellido,telefono);
fflush(stdin);
printf("-Esta seguro? s/n ");
scanf("%c",&opcion2);
if(opcion2=='s')
{
fwrite(&nombre,sizeof(char),1,f);
fwrite(&apellido,sizeof(char),1,f);
fwrite(&telefono,sizeof(char),1,f);
printf("Gracias! ;-) ");
}
else
{
printf("Volviendo al menu... ");
}
system("pause");
system("cls");
}
rewind(f);
fclose(f);
break;
case 2: fflush(stdin);
f=fopen("c:\agenda\agenda.dat","rb");
if((f==NULL))
{
printf("Upps!Error,fichero vacio :( ");
system("cls");
}
else
{
printf("Introduzca un nombre para buscar ");
gets(cad);
fread(&nombre,sizeof(char),1,f);
while(!feof(f))
{
if(strcmp(cad,nombre)==0)
{
fread(&apellido,sizeof(char),1,f);
fread(&telefono,sizeof(char),1,f);
printf("Encontrado :-) ");
printf("Usuario %d ",cont);
printf("El usuario es: ");
printf("Nombre:%s Apellido:%s Telefono:%s ",nombre,apellido,telefono);
contador=1;
cont++;
system("pause");
system("cls");
}
fread(&nombre,sizeof(char),1,f);
}
if(contador==0)
{
printf("Upps!No esta en este fichero ");
system("pause");
system("cls");
}
}
rewind(f);
fclose(f);
break;
case 3: fflush(stdin);
f=fopen("c:\agenda\agenda.dat","rb");
if((f==NULL))
{
printf("Upps!Error,Fichero vacio :( ");
system("pause");
system("cls");
}
else
{
printf("Introduzca apellido para buscar ");
gets(cad);
fread(&apellido,sizeof(char),1,f);
while(!feof(f))
{
if(!strcmp(cad,apellido))
{
fread(nombre,sizeof(char),1,f);
fread(telefono,sizeof(char),1,f);
printf("Encontrado :-) ");
printf("Usuario %d ",cont);
printf("Nombre: %s Apellido:%s Telefono:%s ",nombre,apellido,telefono);
contador=1;
cont++;
system("pause");
system("cls");
break;
}
else
{
fread(&apellido,sizeof(char),1,f);
}
}
if(contador==0)
{
printf("Upps!no esta en este fichero :( ");
system("pause");
system("cls");
}
}
rewind(f);
fclose(f);
break;
case 4:
f=fopen("c:\agenda\agenda.dat","rb");
if((f==NULL))
{
printf("Upps!Error,Fichero vacio :( ");
system("pause");
system("cls");
}
else
{
fread(&nombre,sizeof(char),1,f);
while(!feof(f))
{
encontrado=0;
for(i=0;i< numelem;i++)
{
if(!strcmp(x[i].nombre,nombre))
{
encontrado=1;
pos=i;
break;
}
}
if(encontrado==0)
{
strcpy(x[numelem].nombre,nombre);
x[numelem].num=1;
numelem++;
}
else
{
x[pos].num++;
}
fread(&nombre,sizeof(char),1,f);
}
for(i=0;i< numelem;i++)
{
printf("coincidencias:%d nombre:%s ",x[i].num,x[i].nombre);
}
}
system("pause");
system("cls");
rewind(f);
fclose(f);
break;
case 5: printf("Fin del programa :-)! ");
break;
case 6: printf("**AYUDA** ");
printf("-Al pulsar 0) Crea directorio de la agenda en c:agenda) ");
printf("-Al pulsar 1) por primera vez se creara la agenda, introduciendo sus contactos sucesivamente ");
printf("-Al pulsar 2) Busqueda por nombre(Diferencia mayusculas de minusculas) ");
printf("-Al pulsar 3) Busqueda por apellido(Diferencia mayusculas de minusculas) ");
printf("-Al pulsar 4) Contabiliza los nombres existentes y el numero de coincidencias) ");
printf("-Al pulsar 5) Salir del programa ");
printf("-Al pulsar 7) Realiza una copia de seguridad ");
system("pause");
system("cls");
break;
case 7:
fflush(stdin);
printf("Desea hacer copia de seguridad? s/n ");
scanf("%c",&opcion2);
if(opcion2=='s')
{
f=fopen("c:\agenda\agenda.dat","rb");
a=fopen("c:\agenda\agenda_copia.dat","wb");
if((f==NULL))
{
printf("Upps!Error,fichero vacio :( ");
system("cls");
}
else
{
fread(nombre,sizeof(char),1,f);
while(!feof(f))
{
fread(&nombre,sizeof(char),1,f);
fread(&apellido,sizeof(char),1,f);
fread(&telefono,sizeof(char),1,f);
fwrite(nombre,sizeof(char),1,a);
fwrite(&apellido,sizeof(char),1,a);
fwrite(&telefono,sizeof(char),1,a);
}
}
printf("Copiado con exito :) ");
rewind(f);
rewind(a);
fclose(f);
fclose(a);
system("pause");
system("cls");
}
else
{ printf("Volviendo al menu ");
system("pause");
system("cls");
}
break;
}
}
getch();
}
Ahora estoy con binarios, y me surgen problemas: introduzco un usuario,lo busco,y lo encuentra, introduzco el segundo,lo busco y lo encuentra,pero si vuelvo a buscar el primero no lo encuentra.
Es mas, si cierro el programa y lo vuelvo a ejecutar,no encuentra ninguno.
Me he estado descerebrando y no soy capaz de dar con el error, a ver si sois capaces de echarme 1 mano, os dejo el codigo.Gracias!!!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct funcion
{
char nombre[50];
int num;
};
int main()
{
FILE *f;
FILE *a;
char cad[50];
char nombre[50];
char apellido[50];
char telefono[50];
int contador=0;
int cont=1;
int i;
int pos=0;
int numelem=0;
int encontrado=0;
struct funcion x[50];
char opcion2='o';
int opcion=0;
while(opcion!=5)
{
switch (opcion)
{
case 0: system("mkdir c:\agenda");
break;
case 1: f=fopen("c:\agenda\agenda.dat","ab");
if((f==NULL))
{
printf("Upps!Error al abrir fichero :( ");
printf("Debe de crear el directorio ");
system("pause");
system("cls");
}
else
{
printf("Introduzca Nombre, Apellido y Telefono ");
scanf("%s %s %s",nombre,apellido,telefono);
fflush(stdin);
printf("-Esta seguro? s/n ");
scanf("%c",&opcion2);
if(opcion2=='s')
{
fwrite(&nombre,sizeof(char),1,f);
fwrite(&apellido,sizeof(char),1,f);
fwrite(&telefono,sizeof(char),1,f);
printf("Gracias! ;-) ");
}
else
{
printf("Volviendo al menu... ");
}
system("pause");
system("cls");
}
rewind(f);
fclose(f);
break;
case 2: fflush(stdin);
f=fopen("c:\agenda\agenda.dat","rb");
if((f==NULL))
{
printf("Upps!Error,fichero vacio :( ");
system("cls");
}
else
{
printf("Introduzca un nombre para buscar ");
gets(cad);
fread(&nombre,sizeof(char),1,f);
while(!feof(f))
{
if(strcmp(cad,nombre)==0)
{
fread(&apellido,sizeof(char),1,f);
fread(&telefono,sizeof(char),1,f);
printf("Encontrado :-) ");
printf("Usuario %d ",cont);
printf("El usuario es: ");
printf("Nombre:%s Apellido:%s Telefono:%s ",nombre,apellido,telefono);
contador=1;
cont++;
system("pause");
system("cls");
}
fread(&nombre,sizeof(char),1,f);
}
if(contador==0)
{
printf("Upps!No esta en este fichero ");
system("pause");
system("cls");
}
}
rewind(f);
fclose(f);
break;
case 3: fflush(stdin);
f=fopen("c:\agenda\agenda.dat","rb");
if((f==NULL))
{
printf("Upps!Error,Fichero vacio :( ");
system("pause");
system("cls");
}
else
{
printf("Introduzca apellido para buscar ");
gets(cad);
fread(&apellido,sizeof(char),1,f);
while(!feof(f))
{
if(!strcmp(cad,apellido))
{
fread(nombre,sizeof(char),1,f);
fread(telefono,sizeof(char),1,f);
printf("Encontrado :-) ");
printf("Usuario %d ",cont);
printf("Nombre: %s Apellido:%s Telefono:%s ",nombre,apellido,telefono);
contador=1;
cont++;
system("pause");
system("cls");
break;
}
else
{
fread(&apellido,sizeof(char),1,f);
}
}
if(contador==0)
{
printf("Upps!no esta en este fichero :( ");
system("pause");
system("cls");
}
}
rewind(f);
fclose(f);
break;
case 4:
f=fopen("c:\agenda\agenda.dat","rb");
if((f==NULL))
{
printf("Upps!Error,Fichero vacio :( ");
system("pause");
system("cls");
}
else
{
fread(&nombre,sizeof(char),1,f);
while(!feof(f))
{
encontrado=0;
for(i=0;i< numelem;i++)
{
if(!strcmp(x[i].nombre,nombre))
{
encontrado=1;
pos=i;
break;
}
}
if(encontrado==0)
{
strcpy(x[numelem].nombre,nombre);
x[numelem].num=1;
numelem++;
}
else
{
x[pos].num++;
}
fread(&nombre,sizeof(char),1,f);
}
for(i=0;i< numelem;i++)
{
printf("coincidencias:%d nombre:%s ",x[i].num,x[i].nombre);
}
}
system("pause");
system("cls");
rewind(f);
fclose(f);
break;
case 5: printf("Fin del programa :-)! ");
break;
case 6: printf("**AYUDA** ");
printf("-Al pulsar 0) Crea directorio de la agenda en c:agenda) ");
printf("-Al pulsar 1) por primera vez se creara la agenda, introduciendo sus contactos sucesivamente ");
printf("-Al pulsar 2) Busqueda por nombre(Diferencia mayusculas de minusculas) ");
printf("-Al pulsar 3) Busqueda por apellido(Diferencia mayusculas de minusculas) ");
printf("-Al pulsar 4) Contabiliza los nombres existentes y el numero de coincidencias) ");
printf("-Al pulsar 5) Salir del programa ");
printf("-Al pulsar 7) Realiza una copia de seguridad ");
system("pause");
system("cls");
break;
case 7:
fflush(stdin);
printf("Desea hacer copia de seguridad? s/n ");
scanf("%c",&opcion2);
if(opcion2=='s')
{
f=fopen("c:\agenda\agenda.dat","rb");
a=fopen("c:\agenda\agenda_copia.dat","wb");
if((f==NULL))
{
printf("Upps!Error,fichero vacio :( ");
system("cls");
}
else
{
fread(nombre,sizeof(char),1,f);
while(!feof(f))
{
fread(&nombre,sizeof(char),1,f);
fread(&apellido,sizeof(char),1,f);
fread(&telefono,sizeof(char),1,f);
fwrite(nombre,sizeof(char),1,a);
fwrite(&apellido,sizeof(char),1,a);
fwrite(&telefono,sizeof(char),1,a);
}
}
printf("Copiado con exito :) ");
rewind(f);
rewind(a);
fclose(f);
fclose(a);
system("pause");
system("cls");
}
else
{ printf("Volviendo al menu ");
system("pause");
system("cls");
}
break;
}
}
getch();
}
Valora esta pregunta
0