Tema: Ayuda
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/07/2008, 09:16
nahrein
 
Fecha de Ingreso: julio-2008
Mensajes: 25
Antigüedad: 15 años, 10 meses
Puntos: 0
Ayuda

Hola. Estoy intentando hacer una especie de agenda de numeros de telefono. Solo he escrito parte del codigo, pero no me funciona. No me da problemas al compilar, pero cuando escribo 1 (es la unica opcion del switch que hice por el momento) el programa deja de funcionar.
Se supone que el programa:
1)lee de archivo el numero de contactos
2)reserva memoria para guardar los contactos del archivo mas el que yo quiero añadir en un array de estructuras
3)guarda en el array los datos del fichero
4) me pide que introduzca los datos del nuevo contacto
5)borra los datos del archivo
6)guarda el array en el archivo

Me interesa que le programa trabaje de esta forma. No se si lo que he hecho es lo mas eficiente o no, lo que me interesa es saber por que no funciona y como solucionarlo. Pongo el codigo abajo.
Un saludo.



#include <stdio.h>
#include <stdlib.h>
#define MAX 30

struct datos
{
char nombre[MAX];
int fijo;
int movil;
};

void borra_buffer_teclado();

int main(int argc, char *argv[])
{
int opcion, i;
int datos_agenda; //el numero de contactos que tenemos en nuestra agenda
struct datos *contactos;
FILE *fichero;

printf("**************Escoja una opcion**************\n\n");
printf("1)Introducir un nuevo contacto\n");
printf("2)Borrar un contacto\n");
printf("3)Modificar un contacto\n");
printf("4)Informacion sobre la agenda\n");
printf("5)Salir\n");

do
{
scanf("%i", &opcion);
if(opcion <= 0 || opcion > 5)
printf("Opcion incorrecta. Por favor, escoja una opcion de nuevo\n");
}
while(opcion <= 0 || opcion > 5);

switch(opcion)
{
case 1:

fichero = fopen("datos.txt", "r"); //Guardamos los contactos del archivo en un array de estructuras
if(fichero == NULL)
printf("\nERROR\n");
else
{
fscanf(fichero, "%i", &datos_agenda);
contactos = (struct datos*)malloc(sizeof(struct datos)*datos_agenda++);
for(i=0; i<datos_agenda; i++)
{
fscanf(fichero, "%29[^\n]", contactos[i].nombre);
fscanf(fichero, "%i", contactos[i].fijo);
fscanf(fichero, "%i", contactos[i].movil);
}
printf("\tIntroduzca el nombre\n"); //Introducimos los datos del nuevo contacto
borra_buffer_teclado();
scanf("\t%29[^\n]", contactos[i++].nombre);
printf("\tIntroduzca el numero de telefono fijo");
scanf("\t%i", &contactos[i++].fijo);
printf("\tIntroduzca el numero del telefono movil");
scanf("\t%i", &contactos[i++].movil);
}
fclose(fichero);

fichero = fopen("datos.txt", "w"); //Borramos los datos contenidos en el fichero
for(i=0; i<datos_agenda; i++)
{
fprintf(fichero, " ");
}
fprintf(fichero, "%i", datos_agenda++); //Guardamos los contactos en el archivo
for(i=0; i<datos_agenda++; i++)
{
fprintf(fichero, "%s\t", contactos[i].nombre);
fprintf(fichero, "%i\t", contactos[i].fijo);
fprintf(fichero, "%i\n", contactos[i].movil);
}
fclose(fichero);
free(contactos);

}

system("PAUSE");
return 0;
}