LLenar arreglo con un archivo txt

Iniciado por Angel774, 7 Junio 2016, 00:59 AM

0 Miembros y 1 Visitante están viendo este tema.

Angel774

Muchas gracias amigo, si es asi pero al cerrar el ejecutable el archivo aparece con caracteres extraños

AlbertoBSD

¿Como estas guardado los datos?

Tu funcion: void agenda::guardar_contacto()
{
    FILE *arch;

    arch=fopen("agenda.txt","r");

    fclose(arch);

}


No hace nada solo abre y cierra el archivo.

Saluds
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Angel774

Ya la modifique ahora esta asi

void agenda::guardar_contacto()
{
    FILE *arch;

    arch=fopen("agenda.txt","w");
    fprintf(arch,"%s",lista[cont].nombre);
    fprintf(arch,"%s",lista[cont].direccion);
    fprintf(arch,"%i",lista[cont].numero);
    fclose(arch);

}

AlbertoBSD

Ese "cont" no esta iniciaizado aun, esa sección de memoria tiene pura basura....

NEcesitas solo guardar los contactos del 0 al cont-1 de hecho en tu instrucccion solo guardas 1 contacto no inicializado..

Cambia tu codigo por:

void agenda::guardar_contacto()
{
FILE *arch;
int i = 0;
arch=fopen("agenda.txt","w");
while(i < cont) {
fprintf(arch,"%s",lista[i].nombre);
fprintf(arch,"%s",lista[i].direccion);
fprintf(arch,"%i",lista[i].numero);
i++;
}
fclose(arch);
}


Saludos!!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Angel774

Muchas gracias bro!! ¿Como seria la de eliminar contacto?

AlbertoBSD

Jajajaja

COn tu sistema actual de datos la lista de 60 contactos es algo tedioso.

Primero tienes que localizar el contacto a eliminar ya sea por nombre o numero...

Eso es un sistema de busqueda.

Ahora una vez localizado y situandode en el registro X.... tienes que ve ver si hay mas elementos adelante de la lista. si es el ultimo no hay problema solo borras los datos y el contador lo decrementas en 1, pero si hay mas elementos tines que recorrelos de uno en uno o solo intercambiándolo con el ultimo pero pues es cosa de que decidas como hacerlo.

Es mas facil con apuntadores pero si no los has manejado la cosa se complica un poco.

Mi estimado ya me dormir espero y puedas terminar tu programa a tiempo y también que lo puedas hacer solo.

Un saludo!




Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Angel774

jej si sigues ahi, porque no me busca  :-\


void agenda::buscar_contacto()
{
    char aux[30];
    int i=0;
    contacto x;
  cout<<"Introduce el contacto a buscar:";
  cin>>aux;
  cout<<"cont vale:"<<cont;

  while(i<cont)
  {
      if(strcmp(aux,lista[cont].nombre)==0)
      {
          cout<<"Contacto encontrado";

      }

  }

}



AlbertoBSD

estas buscando cont veces en el mismo elemento lista[cont] cuando deberia de ser lista, ademas no estas incrementando el valor de i en cada busqueda

int agenda::buscar_contacto()
{
    char aux[30];
    int i=0,encontrado = -1;
    contacto x;
  cout<<"Introduce el contacto a buscar:";
  cin>>aux;
  cout<<"cont vale:"<<cont;

  while(encontrado ==-1 &&i<cont)
  {
      if(strcmp(aux,lista[i].nombre)==0)
      {
          cout<<"Contacto encontrado";
          encontrado = i;
      }
      i++;
  }
  return encontrado; // Retornamos el valor de la posicion en el arreglo donde esta nuestro valor buscado
}



Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Angel774

Muchas gracias bro, ya quedo todo mi programa pero tengo un problema con la funcion de eliminar


void agenda::eliminar_contacto()
{
  char aux[30];
  int i=0;
  bool error=false;
  cout<<"Introduce el contacto a eliminar:";
  cin>>aux;

while(i<cont)
{
      if(strcmp(aux,lista[i].nombre)==0)
      {
          error=true;
          cout<<"Contacto eliminado"<<endl;
           lista[i].mostrardatos();
           
           lista[i]=lista[i-1];
           cont--;
      }
    i++;
}
   if(!error)
     cout<<"No encontrado"<<endl;
    else
     mostrar_contacto();
  cout<<endl;

}