Anuncio

Colapsar
No hay ningún anuncio todavía.

Agregar registro a lista enlazada

Colapsar
X
 
  • Filtro
  • Hora
  • Mostrar
Borrar todo
nuevos mensajes

  • C/C++ Agregar registro a lista enlazada

    Un programa (se tilda) cuando ingreso los datos a una lista enlazada (como si quedara esperando que ingrese más datos). La función encargada de agregar los datos a la lista enlazada es la siguiente:

    struct componente
    {
    int codigo;
    char descripcion [20];
    int cantidad;
    double corrienteMax;
    double tensionMax;
    struct componente *sig;
    };


    typedef struct componente Componente, *ptrComponente;

    void agregar (ptrComponente *inicio, ptrComponente nuevo) {
    ptrComponente aux;

    if(*inicio==NULL)
    {
    *inicio=nuevo;
    return;
    }
    else
    {
    aux=*inicio;
    while (aux->sig!=NULL)
    {
    aux=aux->sig;
    }
    aux->sig=nuevo;
    }
    return;
    }
    La implementación en main () es:

    nuevo=(ptrComponente)malloc(sizeof(Componente)); printf("Ingrese el codigo del componente\n");
    scanf("%d", &(nuevo->codigo));
    printf("Ingrese la descripcion-Max 20 caracteres-\n");
    scanf(" %[^\n]", nuevo->descripcion);
    printf("Ingrese la cantidad de este componente en el stocke\n");
    scanf("%d", &(nuevo->cantidad));
    printf("Ingrese la corriente maxima y la tension maxima\n");
    scanf("%lf %lf ", &(nuevo->corrienteMax), &(nuevo->tensionMax));
    nuevo->sig=NULL;
    agregar (&inicio, nuevo);
    PD: no pongo todo el código del programa porque es bastante extenso, la implementación es un caso de un switch. En cuestión, cuando ejecuto esa parte del código, me pide ingresar todos los valores, hasta que ingreso la tensión máxima y ahí se tilda y vuelvo a repetir es como si quedara esperando alguna información (titilando el cursor de la consola). Les pido alguna ayuda.
    Última edición por leo_ro; 31/01/2014, 03:06:44.

  • #2
    Re: Agregar registro a lista enlazada

    Sin poner todo el codigo es muy dificil ver donde esta el error, podria hacer de bruja lola y suponer o adivinar que quizas no has inicializado la variable "inicio" de dentro de la funcion main() con un valor NULL, pero claro falta codigo para poder saberlo.
    Última edición por abuelillo; 31/01/2014, 04:24:28.
     \left\vert{     \Psi_{UNIVERSE}       }\right>  = \sum \alpha_i   \left\vert{     \Psi_{WORLD_i}       }\right> \text{   } \hspace{3 mm}  \sum  \left\vert{} \alpha_i   \right\vert{}^2 = 1

    Comentario


    • #3
      Re: Agregar registro a lista enlazada

      La libreria componente.h : [code ]#include <stdio.h>#ifndef componente_h
      #define componente_h






      struct componente
      {
      int codigo;
      char descripcion [20];
      int cantidad;
      double corrienteMax;
      double tensionMax;
      struct componente *sig;
      };


      typedef struct componente Componente, *ptrComponente;


      void instrucciones (void);
      void agregar (ptrComponente *inicio, ptrComponente nuevo);
      void eliminarComp (ptrComponente *inicio);
      void ver (ptrComponente inicio);
      void buscar (ptrComponente inicio);
      void subir (FILE *archivo, ptrComponente inicio);
      void bajar (FILE *archivo, ptrComponente *inicio);
      void eliminarLista (ptrComponente *inicio);


      #endif


      [/code]
      La implementación de dicha librería: componente.c

      Código:
      #include "componente.h" 
      
      
      
      void instrucciones (void) 
      { 
           printf("-1-Para ingresar componente\n-2-Para ver la lista de componentes\n-3-Para subir los componentes al archivo\n-4-Para bajar los componentes del archivo\n-5-Para buscar componente\n-6-Para eliminar componente\n-7-Para salir\n");
          return; 
      } 
      
      
      void agregar (ptrComponente *inicio, ptrComponente nuevo) 
      { 
           ptrComponente aux; 
           
           if(*inicio==NULL) 
           { 
                             *inicio=nuevo; 
                             return; 
                             } 
           else 
           { 
                aux=*inicio; 
                while (aux->sig!=NULL) 
                { 
                      aux=aux->sig; 
                      } 
                aux->sig=nuevo; 
                } 
                return; 
                } 
      
      
      void eliminarComp (ptrComponente *inicio) 
      {   
           ptrComponente aux, temp;
           int cod;
           printf("Ingrese el código del componente que quiera eliminar\n");
           scanf("%d", &cod); 
           
           aux=*inicio; 
           while (aux->codigo!=cod&&aux!=NULL) 
           {     temp=aux;
                 aux=aux->sig; 
                 } 
           if(aux!=NULL) 
           { 
           temp->sig=aux->sig; 
           free(aux); 
           return;
           } 
           else 
           {
                return; 
                } 
                } 
                
      void ver (ptrComponente inicio) 
      { 
           if(inicio==NULL) 
           { 
                            return; 
                            } 
           else 
           { 
                printf("Codigo: %d\nDescripcion:%s\nCantidad:%d\nCorriente Maxima:%lf\nTension Maxima:%lf\n", inicio->codigo, inicio->descripcion, inicio->cantidad, inicio->corrienteMax, inicio->tensionMax); 
                ver (inicio->sig); 
                } 
                } 
      
      
      void buscar (ptrComponente inicio) 
      {    ptrComponente aux;
           int cod;
           printf("Ingrese el codigo del componente a buscar\n"); 
           scanf("%d", &cod); 
           aux=inicio; 
           while (aux!=NULL) 
           {  
                 if(aux->codigo==cod) 
                 { 
                                      printf("El componente se encuentra\n"); 
                                      printf("Codigo: %d\nDescripcion:%s\nCantidad:%d\nCorriente Maxima:%lf\nTension Maxima:%lf\n", aux->codigo, aux->descripcion, aux->cantidad, aux->corrienteMax, aux->tensionMax); 
                                      return; 
                                      } 
                 aux=aux->sig; 
                 } 
           printf("El componente no se encuentra\n"); 
           return; 
           } 
      
      
      void subir (FILE *archivo, ptrComponente inicio) 
      { 
           ptrComponente aux;
           archivo=fopen ("componentes.txt", "a+"); 
           
           aux=inicio;
           while (aux!=NULL) 
           { 
                 fwrite (aux, sizeof(Componente), 1, archivo); 
                 aux=aux->sig; 
                 } 
           fclose (archivo); 
           } 
           
      
      
      void bajar (FILE *archivo, ptrComponente *inicio) 
      {  
           ptrComponente nuevo, aux; 
           int n,i; 
           
           archivo=fopen ("componentes.txt", "a+");  
           n=(ftell (archivo))/(sizeof(Componente));
           
           for (i=0;i<n;i++) 
           {  
               nuevo=(ptrComponente)malloc (sizeof(Componente)); 
               fread (nuevo, sizeof(Componente),1,archivo);
               inicio=nuevo;
               if(i==0) 
               {   
                   aux->sig=inicio=nuevo; 
                   } 
               else 
               {  
                    aux=nuevo; 
                    aux=nuevo->sig; 
                    } 
                    } 
               fclose (archivo); 
               }
                    
       void eliminarLista (ptrComponente *inicio) 
       { 
            ptrComponente aux, temp; 
            
            aux=*inicio;
            while (aux!=NULL)                
            { 
                  temp=aux; 
                  aux=aux->sig; 
                  free(temp); 
                  } 
                  }
      Y finalmente main.c

      Código:
      #include <stdio.h>#include <stdlib.h>
      #include "componente.h"
      
      
      int main(int argc, char *argv[])
      { 
          FILE *archivo; 
          ptrComponente inicio=NULL, nuevo;
          int eleccion=0; 
          
          while (eleccion!=7) 
          { 
               instrucciones(); 
               scanf("%d", &eleccion); 
               switch(eleccion) 
               { 
                                case 1:  
                                     {   nuevo=(ptrComponente)malloc(sizeof(Componente));
                                         printf("Ingrese el codigo del componente\n"); 
                                         scanf("%d", &(nuevo->codigo)); 
                                         printf("Ingrese la descripcion-Max 20 caracteres-\n"); 
                                         scanf(" %[^\n]", nuevo->descripcion); 
                                         printf("Ingrese la cantidad de este componente en el stocke\n"); 
                                         scanf("%d", &(nuevo->cantidad)); 
                                         printf("Ingrese la corriente maxima y la tension maxima\n"); 
                                         scanf("%lf %lf ", &(nuevo->corrienteMax), &(nuevo->tensionMax)); 
                                         nuevo->sig=NULL;
                                         agregar (&inicio, nuevo); 
                                     break;
                                          
                                          } 
                                          
                                case 2: 
                                     {  ver (inicio); 
                                     break;
                                          
                                          } 
                                          
                                case 3: 
                                     {  
                                          subir(archivo, inicio); 
                                          break;
                                          
                                          } 
                                case 4: 
                                     { 
                                          bajar(archivo,&inicio); 
                                          break;
                                          
                                          } 
                                          
                               case 5: 
                                    { 
                                          buscar(inicio); 
                                          break;
                                          } 
                               case 6: 
                                    { 
                                          eliminarComp (&inicio); 
                                          break;
                                          } 
                                          } 
                                          } 
      eliminarLista (&inicio);
        
        system("PAUSE");    
        return 0;
      }
      Les agradecería su ayuda, siempre tengo problemas con las estructuras de datos dinámicas.
      Última edición por leo_ro; 01/02/2014, 17:09:56.

      Comentario


      • #4
        (OT) Re: Agregar registro a lista enlazada

        Sería bueno si cambias los "QUOTE" por "CODE", harías los programas mas fáciles de leer...
        Don't wrestle with a pig in the mud. You'll both get dirty, but the pig will enjoy it. - Parafraseando a George Bernard Shaw

        Comentario


        • #5
          Re: Agregar registro a lista enlazada

          Listo

          Comentario

          Contenido relacionado

          Colapsar

          Trabajando...
          X