Hola Maria Lo siento pero creo que no has leido bien el enunciado de la practica Realiza un programa en C para gestionar los datos incluidos en un fichero de tipo texto mediante una lista simplemente enlazada.por eso no te cuadra el apartado 1111. grabarLista: graba los datos de la lista en un fichero binario. El nombre del fichero debe ser tomado del argumento en la línea de comandos. La función tendrá como parámetros la lista y el nombre del fichero. En mi opinion lo que tienes que hacer es un programa que lea los datos de un archivo de texto "fichero.txt o fichero.dat" que esta en el disco duro de tu ordenador, entonces carga esos datos a una lista para poder operar con ellos, buscar por apellido, borrar registros, etc y finalmente si el usuario quiere ,volver a grabar los datos en un nuevo archivo, y asi los datos no se pierdan al finalizar la aplicacionSera mejor que preguntes a quien te haya mandado hacer la practica , si es eso lo que te pedian de todas maneras es una pena por que ya tenias hecho un buen trozo de codigo, aunque las funciones de borrar, buscar,almacenar teseguiran valiendo, con algun retoqueSiento darte "malas" noticias pero tranqui que lo de acceso a archivos es mas facil que lo de las listas enlazadas, para mi gusto, si tienes algun problema con el manejo de archivos dimelo, que no se me da del todo mal.Un saludo y animo que no hay nada imposible a programar ¡¡
Por favor, ya lei lo que me pusiste, me puedes echar una mano, es que no se por dodne empezar, entonces que tengo que quitar todas las funciones, no están bien, además de estar mal porque falta la funcion grabar lista, el resto del codigo, esta mal. Por favor, ayudame, que estoy muy apurada. GraciasSaludos
Hola ¡¡ CitarPor favor, ya lei lo que me pusiste, me puedes echar una mano, es que no se por dodne empezar, entonces que tengo que quitar todas las funciones, no están bien, además de estar mal porque falta la funcion grabar lista, el resto del codigo, esta mal. Por favor, ayudame, que estoy muy apurada. GraciasSaludos Tranquilidad ¡¡ ante todo tranquilidad, no te pongas nerviosa que es lo peor que puedes hacer,las cosas poco a poco acaban saliendo, y si no a golpes jeje a veces tambien salenVoy a intentar echarte una mano (con el trabajo no pienses mal ehh ) , pero ten en cuenta que yo tambien estudio (poco pero estudio) y no dispongo de mucho tiempo libre.Bueno, lo primero de todo es empezar por el principio, vaya chorradas que digo, queria decir que lo primero de todo seria recuperar los datos del archivo de texto e introducirlos en la lista.Supongo que tendras que usar fopen.......fclose, etc si no es asi dime que librerias usas para manejar archivos.De momento supongo que lo haces con la de stdlib.h (creo que era esa donde estaban), ahi o en stdio.h. Una vez hecho esto hay que implementar las funciones de manejo de la listaMañana en el metro me leere todo el lio de manejo de archivos para refrescar la memoria, porque ultimamente solo he usado librerias MFC y las cosas se van olvidando. De todas maneras si quieres ir mirando algun libro te recomiendo el de James L.Antonakos "Programacion estructurada en C" que viene muy bien el tema de archivos y tambien viene el tema de listas enlazadas.Si no puedes conseguirlo dejame un email donde mandarte scaneado esos dos temas.Mañana por la tarde o el miercoles ya te digo si se me ocurrio algo Un saludito y no te rindas
Hola Aqui estoy ¡¡ Empecemos, ....., lo de texto o binario solamente has de preocuparte a la hora de grabar o cargar archivos, es decir, segun lo que te piden debes cargarlo de uno de texto y grabarlo en uno binario.fwrite y fread creo que era para el caso de guardar o cargar estructuras enteras en un archivo, el caso que te piden yo creo que es el de un archivo de texto en el que cada dato esta separado por un espacio y cada registro por un salto de lineaejemploJose Hernando Gutierrez 45Alfonso Hurtado Sanchez 22...........etcPara poder extraer los datos del archivo de texto he usado fprintf, aqui tienes el codigo, solo me ha dado tiempo a cogerlos e imprimirlos por pantalla, pero seria facil de meter en la lista, mañana nos miramos esoCódigo: Text #include <stdio.h> void main(void){ // variables para meter temporalmente los datos que leemos del fichero char nombre[15];char ape1[15];char ape2[15];int edad; FILE *puntero; // declaro un puntero al ficheropuntero=fopen("TEXTO.TXT","r"); // asocio ese puntero al archivo y le // digo que lo voy a leer /* ahora hacemos un bucle para ir recogiendo cada linea(cada registro) con la funcion fscanf, lo que hace fscanf es leer datos segun le indica el entrecomillado y los mete en las variables que le digamos, cuando acaba con el entrecomillado salta a la siguiente linea.El bucle terminara si se llega al final del archivo EOF*/ while(fscanf(puntero,"%s %s %s %i",nombre,ape1,ape2,&edad)!=EOF){printf("%s %s %s %i\n",nombre,ape1,ape2,edad);}fclose(puntero); // cerramos el acceso al archivoprintf("\n\npulsa cualquier tecla para salir");getchar(); } Este es todo el codigo, como puedes ver facilillo,bueno habria que hacerle una implementacion de gestion de errores, ya que por ejemplo si no existe el archivo de texto salta un error de ejecucionMañana estare un poco liado que tengo practicas , pero si me da tiempo miro como meterlo en una lista enlazada, aunque eso creo que tu lo dominas bastante mejor Aqui te dejo el ejecutable para que veas que funciona, puedes probar a cambiar el archivo de texto, pero respetando el orden de los datosUn saludito animo que esto marcha ¡¡¡
Cita de: "Diodo" Hola Aqui estoy ¡¡ Empecemos, ....., lo de texto o binario solamente has de preocuparte a la hora de grabar o cargar archivos, es decir, segun lo que te piden debes cargarlo de uno de texto y grabarlo en uno binario.fwrite y fread creo que era para el caso de guardar o cargar estructuras enteras en un archivo, el caso que te piden yo creo que es el de un archivo de texto en el que cada dato esta separado por un espacio y cada registro por un salto de lineaejemploJose Hernando Gutierrez 45Alfonso Hurtado Sanchez 22...........etcPara poder extraer los datos del archivo de texto he usado fprintf, aqui tienes el codigo, solo me ha dado tiempo a cogerlos e imprimirlos por pantalla, pero seria facil de meter en la lista, mañana nos miramos esoCódigo: Text #include <stdio.h> void main(void){ // variables para meter temporalmente los datos que leemos del fichero char nombre[15];char ape1[15];char ape2[15];int edad; FILE *puntero; // declaro un puntero al ficheropuntero=fopen("TEXTO.TXT","r"); // asocio ese puntero al archivo y le // digo que lo voy a leer /* ahora hacemos un bucle para ir recogiendo cada linea(cada registro) con la funcion fscanf, lo que hace fscanf es leer datos segun le indica el entrecomillado y los mete en las variables que le digamos, cuando acaba con el entrecomillado salta a la siguiente linea.El bucle terminara si se llega al final del archivo EOF*/ while(fscanf(puntero,"%s %s %s %i",nombre,ape1,ape2,&edad)!=EOF){printf("%s %s %s %i\n",nombre,ape1,ape2,edad);}fclose(puntero); // cerramos el acceso al archivoprintf("\n\npulsa cualquier tecla para salir");getchar(); } Este es todo el codigo, como puedes ver facilillo,bueno habria que hacerle una implementacion de gestion de errores, ya que por ejemplo si no existe el archivo de texto salta un error de ejecucionMañana estare un poco liado que tengo practicas , pero si me da tiempo miro como meterlo en una lista enlazada, aunque eso creo que tu lo dominas bastante mejor Aqui te dejo el ejecutable para que veas que funciona, puedes probar a cambiar el archivo de texto, pero respetando el orden de los datosUn saludito animo que esto marcha ¡¡¡ Gracias, insisto que eres muy amable, lo de meterlos en la lista, creo que es con fwrite( LISTA, sizeof(struct lista), 1, fp);No estoy segura pero creo que es así, cuando terminemos esta parte, ya podemos ver si funcionan las funciones no?. Es que eso me preocupa mucho. De nuevo gracias, y te deseo mucha suerte en tus estudios y practicas.Un saludo Mjose
Hola ¡¡¡ Cuanto tiempo ¡¡ Pues si parece que estuvo bastante tiempo sin funcionar esto, yo intente entrar varios dias seguidos pero me canse y deje de intentarlo xd. Desde cuando esta esto operativo?Espero que hayas progresado algo en la practica, yo hice algo pero como no tenia donde mandartelo (por cierto que con tu permiso te agrego al messenger, que siempre viene bien tener una informatica a mano jeje) Creo que consigo meter lo del archivo de texto en la lista pero al mostrarlo por pantalla solo me sale el ultimo registro, a lo mejor es que esta mal la funcion de mostrar, echale tu un vistazo a ver si das con el fallo. De todas maneras este puente que tengo mas tiempo libre lo mirare de nuevo que ya ni me acuerdo lo que hice.fwrite es para grabar los registros en un archivo .DAT asi que no te sirve para meter nada en las listas, para meterlos en una lista tendras que crear tu la funcion ir leyendo del archivo de texto y meter cada registro en un nodo de la listaEste es el codigo que hice:Código: Text #include <stdio.h>#include <stdlib.h>#include <string.h> struct lista{ char nombre[15]; char ape1[15]; char ape2[15]; int edad; struct lista *enlace;}; typedef struct lista LISTA; int menu(void);void cogerDatosTexto(LISTA *ptr);void mostrarLista(LISTA *ptr); void main(){ LISTA *principal; int eleccion; do { eleccion =menu(); switch (eleccion) { case 1: principal= (LISTA *) malloc(sizeof(LISTA)); cogerDatosTexto(principal); continue; case 2: printf("\n"); mostrarLista(principal); continue; default: printf("fin de las operaciones\n"); } }while(eleccion !=3);} int menu(void) { int eleccion; do { printf("\n menu principal:\n"); printf("1.-crear la lista enlazada\n"); printf("2.-mostrar lista\n"); printf("3.-fin\n"); printf("por favor introduzca su elecci¢n (1,2,3)->\n"); scanf("%d",&eleccion); if (eleccion<1 || eleccion>3) printf("\n ERROR - porfavor , intentelo de nuevo \n"); } while(eleccion<1 || eleccion>3); printf("\n"); return(eleccion); } void cogerDatosTexto(LISTA *ptr){ char nom[15]; char ap1[15]; char ap2[15]; int ed; FILE *puntero; puntero=fopen("TEXTO.TXT","r"); while(fscanf(puntero,"%s %s %s %i",nom,ap1,ap2,&ed)!=EOF) { strcpy(ptr->nombre,nom); strcpy(ptr->ape1,ap1); strcpy(ptr->ape2,ap2); ptr->edad=ed; ptr->enlace=(LISTA*)malloc(sizeof(LISTA)); fflush(stdin); } ptr->enlace=NULL; fclose(puntero); } void mostrarLista(LISTA *ptr){ if(ptr!=NULL) { printf("%s %s %s %i \n",ptr->nombre,ptr->ape1,ptr->ape2,ptr->edad); } return; } Para que funcione tienes que crear el archivo de texto TEXTO.txt en el directorio raiz, que si no da errorEspero que te sirva de ayuda, si logro que funcione del todo te avisoUn saludito