Código:
y el main#include <stdio.h> #include <stdlib.h> #include <string.h> struct personas { char nombre[15]; int edad; struct personas *siguiente; }; // carga el fichero(Solo la primera persona) void cargar(char *archivo, struct personas **ultima, struct personas **primera, int *nPersonas){ FILE *fichero; char nom[15]; if (fichero=fopen(archivo,"rb") == NULL){ puts("Error al abrir el fichero"); } else { struct personas *persona=NULL; if ((persona=malloc(sizeof(struct personas)))==NULL){ puts("Error al asignar la memoria"); } else { int cont; // leeo los 14 primeros carcteres y los guardo en nom cont=fread(nom,sizeof(char),14,fichero); // intrudozco el caracter nulo al final de la cadena nom[14]='\0'; puts(nom); printf("%d",cont); fread(persona->edad,sizeof(int),1,fichero); persona->siguiente=NULL; if (*primera==NULL){ *primera=persona; *ultima=persona; } else { (**ultima).siguiente=persona; *ultima=persona; } (*nPersonas)++; } fclose(fichero); printf("Cargado completo, hay %d personas\n",(*nPersonas)); } } // guarda la lista de personas al fichero void guardar(char *archivo, struct personas *primera){ FILE *fichero; if ((fichero=fopen(archivo,"wb"))==NULL){ puts("Error en la escritura del archivo"); } else { fflush(stdin); struct personas *perActual=primera; while (perActual!=NULL) { fwrite(perActual->nombre,sizeof(char),14,fichero); fwrite(&perActual->edad,sizeof(int),1,fichero); perActual=perActual->siguiente; } fflush(fichero); fclose(fichero); puts("Guardado completo"); } } void insertar(struct personas **primera, struct personas **ultima, int *nPersonas){ struct personas *persona=NULL; //puntero que apuntara a la persona q estamos creando char nom[15]; // asignamos el espacio de memoria necesario para la persona if ((persona=malloc(sizeof(struct personas)))==NULL){ puts("Error al asignar la memoria"); } else { int cont=0; // pedimos los datos de la persona puts("Dime el nombre de la persona: "); gets(nom); // completamos con espacios para llegar a los 14 caracteres for (cont=strlen(nom);cont<14;cont++){ nom[cont]=' '; } // introducimos el caracter nulo al final de la cadena nom[cont]='\0'; strcpy(persona->nombre,nom); fflush(stdin); puts("Dime la edad: "); scanf("%d",&persona->edad); fflush(stdin); persona->siguiente=NULL; // ponemos siguiente a null ya que la persona actual sera la ultima if (*primera==NULL){ // si primera es null no tenemos personas y la primera y ultima seran la actual *ultima=persona; *primera=persona; } else { // si ya tenemos personas el puntero siguiente de la ultima persona apuntara // a la actual y la ultima sera esta (**ultima).siguiente=persona; *ultima=persona; } (*nPersonas)++; puts("Insercion correcta"); } } void mostrar(struct personas *primera){ if ((primera==NULL)){ puts("No hay personas insertadas"); } else { struct personas *perActual=primera; // asignamos la primera persona al puntero y mos tramos sus datos do { printf("Nombre: %s\nEdad: %d\n",perActual->nombre, perActual->edad); // buscamos la siguiente persona y apuntamos a ella perActual=perActual->siguiente; } while(perActual!=NULL); } }
Código:
creo q la funcion fread la estoy escribiendo bien pero nose xk no me lee nada.#include <stdio.h> #include <stdlib.h> struct personas { char nombre[15]; int edad; struct personas *siguiente; }; /* * */ void main() { int opcion=10; char *archivo = "archivo.dat"; struct personas *primera=NULL; struct personas *ultima=NULL; int nPersonas=0; while (opcion!=0){ puts("1. Cargar archivo"); puts("2. Guardar archivo"); puts("3. Insertar"); puts("4. Mostrar"); puts("0. Salir"); puts("Haga su eleccion"); scanf("%d",&opcion); fflush(stdin); switch(opcion){ case 1:{ cargar(archivo, &ultima, &primera, &nPersonas); break; } case 2: { guardar(archivo, primera); break; } case 3: { insertar(&primera, &ultima, &nPersonas); break; } case 4: { mostrar(primera); break; } case 0: { puts("Hasta la proxima"); break; } default: { puts("No es una opcion valida"); } } } }
Saludos,
Dani.