• Domingo 22 de Diciembre de 2024, 04:27

Autor Tema:  Duda De Listas Simples En C  (Leído 4081 veces)

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Duda De Listas Simples En C
« en: Viernes 12 de Noviembre de 2004, 21:55 »
0
Lo que necesito esta puesto ahora en el script de arriba, en la nueva discusion que he puesto de Error de ejecucion en memoria, si alguien quiere ayudarme, que la lea. Gracias.

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Duda De Listas Simples En C
« Respuesta #1 en: Sábado 13 de Noviembre de 2004, 09:37 »
0
Hola Maria  :hola:

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 11

11. 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 aplicacion

Sera 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 retoque

Siento 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 :hola:  y animo que no hay nada imposible  :rolleyes:  a programar ¡¡  :comp:

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Duda De Listas Simples En C
« Respuesta #2 en: Domingo 14 de Noviembre de 2004, 21:01 »
0
Cita de: "Diodo"
Hola Maria  :hola:

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 11

11. 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 aplicacion

Sera 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 retoque

Siento 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 :hola:  y animo que no hay nada imposible  :rolleyes:  a programar ¡¡  :comp:
Te agradezco tu pronta respuesta, tiens razón no lei bien, el enunciado de la practica. Me podrías ayudar a comenzar a modificarla, es que estoy un poco perdida. Tengo el examen en diciembre, y esta vez tengo que aprobar como sea. Gracias, espero tu respuesta.
Saludos

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Duda De Listas Simples En C
« Respuesta #3 en: Lunes 15 de Noviembre de 2004, 18:12 »
0
Cita de: "Diodo"
Hola Maria  :hola:

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 11

11. 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 aplicacion

Sera 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 retoque

Siento 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 :hola:  y animo que no hay nada imposible  :rolleyes:  a programar ¡¡  :comp:
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. Gracias
Saludos

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Duda De Listas Simples En C
« Respuesta #4 en: Lunes 15 de Noviembre de 2004, 23:40 »
0
Hola ¡¡  :hola:

Citar

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. Gracias
Saludos


 :o

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  :lightsabre:  jeje a veces tambien salen

Voy a intentar echarte una mano (con el trabajo  :lol:  no pienses mal ehh  :whistling: ) , pero ten en cuenta que yo tambien estudio  :smartass:  (poco pero estudio) y no dispongo de mucho tiempo libre.

Bueno, lo primero de todo es empezar por el principio,  :blink:  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 lista

Mañ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  :hola: y no te rindas  :comp:

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Duda De Listas Simples En C
« Respuesta #5 en: Martes 16 de Noviembre de 2004, 12:21 »
0
Cita de: "Diodo"
Hola ¡¡  :hola:

Citar

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. Gracias
Saludos


 :o

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  :lightsabre:  jeje a veces tambien salen

Voy a intentar echarte una mano (con el trabajo  :lol:  no pienses mal ehh  :whistling: ) , pero ten en cuenta que yo tambien estudio  :smartass:  (poco pero estudio) y no dispongo de mucho tiempo libre.

Bueno, lo primero de todo es empezar por el principio,  :blink:  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 lista

Mañ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  :hola: y no te rindas  :comp:
Ante todo lo primero muchisimas gracias, eres un encanto, Me hago cargo de que tambien eres estudiante, y no tienes mucho tiempo. Asi que si alguna vez yo te puedo ayudar en algo, es un placer, porque te estás portando muy bien conmigo.
Según lo dicho, lo primero es crear un fichero de texto, por ejemplo listas. txt. No?
Y dices que hay que abrirlo y meterlo en la lista, verdad?.
Pues yo creo que sería algo así

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>

/*Declaramos la lista*/
struct lista
{
    char nombre[15];
    char ape1[15];
    char ape2[15];
    int edad;
    struct lista *sig;
};

struct lista LISTA;
FILE *fp;
if(fp = fopen("listas.txt", "rb")) == NULL) //abrimos el fichero para lectura{
   printf("Error al abrir el archivo"\n");
 return 0;

else{
       fwrite( LISTA, sizeof(struct lista), 1, fp);
}

Yo creo que es algo asi, primero abro el archivo de texto, listas.txt, auqnue es que pasa una cosa, lo he abierto como binario, para luego poder escribir los datos en la lista, de manera binaria, con el fwrite, que es la forma mejor de pasar toda la estructura entera. Cuando tengas tiempo le echas un vistacillo. Vale?.
Pero apesar de eso, mi mayor preocupación, es saber si el resto de funciones de la lista, estan correctas o no. De nuevo, muchas gracia, me has tranquilizado mucho.
Suerte en tus estudios.
Saludos Mjose

 :hola:

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Duda De Listas Simples En C
« Respuesta #6 en: Martes 16 de Noviembre de 2004, 23:51 »
0
Hola  :hola:  Aqui estoy ¡¡  :comp:

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 linea

ejemplo

Jose Hernando Gutierrez 45
Alfonso Hurtado Sanchez 22
...........
etc

Para 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 eso

Código: Text
  1.  
  2.  
  3. #include &#60;stdio.h&#62;
  4.  
  5.  
  6. void main(void)
  7. {
  8.  
  9. // variables para meter temporalmente los datos que leemos del fichero
  10.  
  11. char nombre[15];
  12. char ape1[15];
  13. char ape2[15];
  14. int edad;
  15.  
  16. FILE *puntero; // declaro un puntero al fichero
  17. puntero=fopen(&#34;TEXTO.TXT&#34;,&#34;r&#34;); // asocio ese puntero al archivo y le
  18.                                                  // digo que lo voy a leer
  19.  
  20. /* 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*/
  21.  
  22. while(fscanf(puntero,&#34;%s %s %s %i&#34;,nombre,ape1,ape2,&edad)!=EOF)
  23. {
  24. printf(&#34;%s %s %s %i&#092;n&#34;,nombre,ape1,ape2,edad);
  25. }
  26. fclose(puntero); // cerramos el acceso al archivo
  27. printf(&#34;&#092;n&#092;npulsa cualquier tecla para salir&#34;);
  28. getchar();
  29.  
  30. }
  31.  
  32.  

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 ejecucion

Mañ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 datos

Un saludito  :hola:  animo que esto marcha ¡¡¡  :lol:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Duda De Listas Simples En C
« Respuesta #7 en: Jueves 18 de Noviembre de 2004, 12:26 »
0
Cita de: "Diodo"
Hola  :hola:  Aqui estoy ¡¡  :comp:

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 linea

ejemplo

Jose Hernando Gutierrez 45
Alfonso Hurtado Sanchez 22
...........
etc

Para 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 eso

Código: Text
  1.  
  2.  
  3. #include &#60;stdio.h&#62;
  4.  
  5.  
  6. void main(void)
  7. {
  8.  
  9. // variables para meter temporalmente los datos que leemos del fichero
  10.  
  11. char nombre[15];
  12. char ape1[15];
  13. char ape2[15];
  14. int edad;
  15.  
  16. FILE *puntero; // declaro un puntero al fichero
  17. puntero=fopen(&#34;TEXTO.TXT&#34;,&#34;r&#34;); // asocio ese puntero al archivo y le
  18.                                                  // digo que lo voy a leer
  19.  
  20. /* 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*/
  21.  
  22. while(fscanf(puntero,&#34;%s %s %s %i&#34;,nombre,ape1,ape2,&edad)!=EOF)
  23. {
  24. printf(&#34;%s %s %s %i&#092;n&#34;,nombre,ape1,ape2,edad);
  25. }
  26. fclose(puntero); // cerramos el acceso al archivo
  27. printf(&#34;&#092;n&#092;npulsa cualquier tecla para salir&#34;);
  28. getchar();
  29.  
  30. }
  31.  
  32.  

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 ejecucion

Mañ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 datos

Un saludito  :hola:  animo que esto marcha ¡¡¡  :lol:
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

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Duda De Listas Simples En C
« Respuesta #8 en: Lunes 29 de Noviembre de 2004, 19:01 »
0
Cita de: "i82maria"
Cita de: "Diodo"
Hola  :hola:  Aqui estoy ¡¡  :comp:

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 linea

ejemplo

Jose Hernando Gutierrez 45
Alfonso Hurtado Sanchez 22
...........
etc

Para 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 eso

Código: Text
  1.  
  2.  
  3. #include &#60;stdio.h&#62;
  4.  
  5.  
  6. void main(void)
  7. {
  8.  
  9. // variables para meter temporalmente los datos que leemos del fichero
  10.  
  11. char nombre[15];
  12. char ape1[15];
  13. char ape2[15];
  14. int edad;
  15.  
  16. FILE *puntero; // declaro un puntero al fichero
  17. puntero=fopen(&#34;TEXTO.TXT&#34;,&#34;r&#34;); // asocio ese puntero al archivo y le
  18.                                                  // digo que lo voy a leer
  19.  
  20. /* 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*/
  21.  
  22. while(fscanf(puntero,&#34;%s %s %s %i&#34;,nombre,ape1,ape2,&edad)!=EOF)
  23. {
  24. printf(&#34;%s %s %s %i&#092;n&#34;,nombre,ape1,ape2,edad);
  25. }
  26. fclose(puntero); // cerramos el acceso al archivo
  27. printf(&#34;&#092;n&#092;npulsa cualquier tecla para salir&#34;);
  28. getchar();
  29.  
  30. }
  31.  
  32.  

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 ejecucion

Mañ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 datos

Un saludito  :hola:  animo que esto marcha ¡¡¡  :lol:
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 DIodo, no sabes cuanto me alegro de poder escribirte, resulta que ha estado este foro caido, unas semanas creo, si quieres te dejo mi correo, por si vuelve a caerse el foro, es matrigca@hotmail.com, es que como nos iba tan bien terminando la practica de listas. Asi será mejor. De nuevo, gracias, espero q me contestes pronto, saludos  :hola:

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Duda De Listas Simples En C
« Respuesta #9 en: Sábado 4 de Diciembre de 2004, 13:39 »
0
Hola ¡¡¡  :hola:  Cuanto tiempo ¡¡   :D

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 lista

Este es el codigo que hice:

Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4. #include &#60;string.h&#62;
  5.  
  6. struct lista
  7. {
  8.   char nombre[15];
  9.   char ape1[15];
  10.   char ape2[15];
  11.   int edad;
  12.   struct lista *enlace;
  13. };
  14.  
  15. typedef struct lista LISTA;
  16.  
  17. int menu(void);
  18. void cogerDatosTexto(LISTA *ptr);
  19. void mostrarLista(LISTA *ptr);
  20.  
  21.  
  22. void main()
  23. {
  24.  
  25.   LISTA *principal;
  26.   int eleccion;
  27.   do
  28.   {
  29.        eleccion =menu();
  30.        switch (eleccion)
  31.         {
  32.           case 1:
  33.             principal= (LISTA *) malloc(sizeof(LISTA));
  34.             cogerDatosTexto(principal);  
  35.             continue;  
  36.  
  37.          case 2:
  38.            printf(&#34;&#092;n&#34;);
  39.            mostrarLista(principal);
  40.            continue;
  41.  
  42.          default:
  43.            printf(&#34;fin de las operaciones&#092;n&#34;);
  44.        }  
  45.     }while(eleccion !=3);
  46. }
  47.  
  48.  
  49.  
  50. int menu(void)
  51.  {
  52.    int eleccion;
  53.    do
  54.      {
  55.        printf(&#34;&#092;n menu principal:&#092;n&#34;);
  56.        printf(&#34;1.-crear la lista enlazada&#092;n&#34;);
  57.        printf(&#34;2.-mostrar lista&#092;n&#34;);
  58.        printf(&#34;3.-fin&#092;n&#34;);
  59.        printf(&#34;por favor introduzca su elecci¢n (1,2,3)-&#62;&#092;n&#34;);
  60.        scanf(&#34;%d&#34;,&eleccion);
  61.        if (eleccion&#60;1 || eleccion&#62;3)
  62.        printf(&#34;&#092;n ERROR - porfavor , intentelo de nuevo &#092;n&#34;);
  63.      } while(eleccion&#60;1 || eleccion&#62;3);
  64.  
  65.    printf(&#34;&#092;n&#34;);
  66.    return(eleccion);
  67.  }
  68.  
  69. void cogerDatosTexto(LISTA *ptr)
  70. {
  71.   char nom[15];
  72.   char ap1[15];
  73.   char ap2[15];
  74.   int ed;
  75.   FILE *puntero;
  76.  
  77.   puntero=fopen(&#34;TEXTO.TXT&#34;,&#34;r&#34;);
  78.  
  79.   while(fscanf(puntero,&#34;%s %s %s %i&#34;,nom,ap1,ap2,&ed)!=EOF)
  80.   {
  81.     strcpy(ptr-&#62;nombre,nom);
  82.     strcpy(ptr-&#62;ape1,ap1);
  83.     strcpy(ptr-&#62;ape2,ap2);
  84.     ptr-&#62;edad=ed;
  85.     ptr-&#62;enlace=(LISTA*)malloc(sizeof(LISTA));
  86.     fflush(stdin);
  87.   }
  88.   ptr-&#62;enlace=NULL;
  89.  
  90.   fclose(puntero);
  91.  
  92.  
  93. }
  94.  
  95. void mostrarLista(LISTA *ptr)
  96. {
  97.   if(ptr!=NULL)
  98.   {
  99.     printf(&#34;%s %s %s %i &#092;n&#34;,ptr-&#62;nombre,ptr-&#62;ape1,ptr-&#62;ape2,ptr-&#62;edad);
  100.    
  101.  
  102.   }
  103.   return;
  104.  
  105. }
  106.  
  107.  

Para que funcione tienes que crear el archivo de texto TEXTO.txt en el directorio raiz, que si no da error

Espero que te sirva de ayuda, si logro que funcione del todo te aviso

Un saludito  :hola:

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Duda De Listas Simples En C
« Respuesta #10 en: Sábado 4 de Diciembre de 2004, 18:09 »
0
Cita de: "Diodo"
Hola ¡¡¡  :hola:  Cuanto tiempo ¡¡   :D

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 lista

Este es el codigo que hice:

Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4. #include &#60;string.h&#62;
  5.  
  6. struct lista
  7. {
  8.   char nombre[15];
  9.   char ape1[15];
  10.   char ape2[15];
  11.   int edad;
  12.   struct lista *enlace;
  13. };
  14.  
  15. typedef struct lista LISTA;
  16.  
  17. int menu(void);
  18. void cogerDatosTexto(LISTA *ptr);
  19. void mostrarLista(LISTA *ptr);
  20.  
  21.  
  22. void main()
  23. {
  24.  
  25.   LISTA *principal;
  26.   int eleccion;
  27.   do
  28.   {
  29.        eleccion =menu();
  30.        switch (eleccion)
  31.         {
  32.           case 1:
  33.             principal= (LISTA *) malloc(sizeof(LISTA));
  34.             cogerDatosTexto(principal);  
  35.             continue;  
  36.  
  37.          case 2:
  38.            printf(&#34;&#092;n&#34;);
  39.            mostrarLista(principal);
  40.            continue;
  41.  
  42.          default:
  43.            printf(&#34;fin de las operaciones&#092;n&#34;);
  44.        }  
  45.     }while(eleccion !=3);
  46. }
  47.  
  48.  
  49.  
  50. int menu(void)
  51.  {
  52.    int eleccion;
  53.    do
  54.      {
  55.        printf(&#34;&#092;n menu principal:&#092;n&#34;);
  56.        printf(&#34;1.-crear la lista enlazada&#092;n&#34;);
  57.        printf(&#34;2.-mostrar lista&#092;n&#34;);
  58.        printf(&#34;3.-fin&#092;n&#34;);
  59.        printf(&#34;por favor introduzca su elecci¢n (1,2,3)-&#62;&#092;n&#34;);
  60.        scanf(&#34;%d&#34;,&eleccion);
  61.        if (eleccion&#60;1 || eleccion&#62;3)
  62.        printf(&#34;&#092;n ERROR - porfavor , intentelo de nuevo &#092;n&#34;);
  63.      } while(eleccion&#60;1 || eleccion&#62;3);
  64.  
  65.    printf(&#34;&#092;n&#34;);
  66.    return(eleccion);
  67.  }
  68.  
  69. void cogerDatosTexto(LISTA *ptr)
  70. {
  71.   char nom[15];
  72.   char ap1[15];
  73.   char ap2[15];
  74.   int ed;
  75.   FILE *puntero;
  76.  
  77.   puntero=fopen(&#34;TEXTO.TXT&#34;,&#34;r&#34;);
  78.  
  79.   while(fscanf(puntero,&#34;%s %s %s %i&#34;,nom,ap1,ap2,&ed)!=EOF)
  80.   {
  81.     strcpy(ptr-&#62;nombre,nom);
  82.     strcpy(ptr-&#62;ape1,ap1);
  83.     strcpy(ptr-&#62;ape2,ap2);
  84.     ptr-&#62;edad=ed;
  85.     ptr-&#62;enlace=(LISTA*)malloc(sizeof(LISTA));
  86.     fflush(stdin);
  87.   }
  88.   ptr-&#62;enlace=NULL;
  89.  
  90.   fclose(puntero);
  91.  
  92.  
  93. }
  94.  
  95. void mostrarLista(LISTA *ptr)
  96. {
  97.   if(ptr!=NULL)
  98.   {
  99.     printf(&#34;%s %s %s %i &#092;n&#34;,ptr-&#62;nombre,ptr-&#62;ape1,ptr-&#62;ape2,ptr-&#62;edad);
  100.     
  101.  
  102.   }
  103.   return;
  104.  
  105. }
  106.  
  107.  

Para que funcione tienes que crear el archivo de texto TEXTO.txt en el directorio raiz, que si no da error

Espero que te sirva de ayuda, si logro que funcione del todo te aviso

Un saludito  :hola:
Gracias Diodo yo tambien me alegro de tener noticias tuyas, si que creo que tienes razón para lo de grabar lista, asi que voy a probar lo que me has escrito, Ojalá consigamos que funcione bien la practica, jejej.
Gracias de nuevo, saludos.