[C con Clase] ayuda por favor

Christian Reyes Garcia. chreyes en gmail.com
Vie Feb 15 17:24:37 CET 2013


a mi me compila bien, eso si los punteros apuntan a cualquier parte :(

El día 15 de febrero de 2013 15:19, Marcela Bustamante
<marcela_bustamante en itrsa.com.ar> escribió:
> Buenas tardes, este ejercicio me está presentando el error segmentation
> fault y la verdad que no tengo idea de que estoy haciendo mal desde ya
> muchas gracias por la ayuda o información que me puedan brindar
>
>
>
>
>
> /*Ejercicio 8.2.
>
> Repetir el ejercicio anterior creando una estructura struct dNode para una
> lista doblemente
>
> enlazada.*/
>
>
>
> #include <stdio.h>
>
> #include <stdlib.h>
>
>
>
> //declaro la estructura la cual va a ser un tipo de dato que contiene
> nombre, apell y edad
>
> typedef struct sData
>
> {
>
> char Nombre[30];
>
> char Apellido[30];
>
> char Edad[10];
>
> }tiposData;
>
>
>
> //Creo el nodo que va a contener el tipo de dato     tiposData dato;
>
>
>
> typedef struct Nodo
>
> {
>
>     tiposData dato;
>
>     struct Nodo *anterior,*siguiente;
>
> } tipoNodo;
>
>
>
>
>
> typedef tipoNodo *pNodo;
>
> typedef tipoNodo *Lista;
>
>
>
>
>
> void Insertar(Lista *lista, tiposData v) {
>
>    pNodo nuevo, actual;
>
>
>
>    /* Crear un nodo nuevo */
>
>    nuevo = (pNodo)malloc(sizeof(tipoNodo));
>
>    nuevo->dato = v;
>
>
>
>    /* Colocamos actual en la primera posición de la lista */
>
>    actual = *lista;
>
>    if(actual) while(actual->anterior) actual = actual->anterior;
>
>
>
>    /* Si la lista está vacía o el primer miembro es mayor que el nuevo */
>
>    if(!actual || strncmp(actual->dato.Nombre,v.Nombre) > 0) {
>
>       /* Añadimos la lista a continuación del nuevo nodo */
>
>       nuevo->siguiente = actual;
>
>       nuevo->anterior = NULL;
>
>       if(actual) actual->anterior = nuevo;
>
>       if(!*lista) *lista = nuevo;
>
>    }
>
>    else {
>
>       /* Avanzamos hasta el último elemento o hasta que el siguiente tenga
>
>          un valor mayor que v */
>
>       while(actual->siguiente &&
> strncmp(actual->siguiente->dato.Nombre,v.Nombre)< 0)
>
>       {
>
>           actual = actual->siguiente;
>
>       /* Insertamos el nuevo nodo después del nodo anterior */
>
>       nuevo->siguiente = actual->siguiente;
>
>       actual->siguiente = nuevo;
>
>       nuevo->anterior = actual;
>
>       if(nuevo->siguiente) nuevo->siguiente->anterior = nuevo;
>
>       }
>
>    }
>
> }
>
>
>
>
>
>
>
> //a la funcion mostrar solo se le pasa la lista
>
> void mostrar(Lista *l)
>
> {
>
>     Lista aux;
>
>     aux=l;
>
>     while(aux->siguiente)
>
>     {
>
>
>
>         printf("El nombre es:%s\n",aux->dato.Nombre);
>
>         printf("El apellido es:%s\n",aux->dato.Apellido);
>
>         printf("La edad es:%s\n",aux->dato.Edad);
>
>         printf("\n");
>
>         aux=aux->siguiente;
>
>
>
>             }
>
> }
>
>
>
> tiposData ingresarDatos()
>
> {
>
>     tiposData nuevoDato;
>
>     printf("Ingrese Nombre\n");
>
>     scanf("%s",nuevoDato.Nombre);
>
>     printf("Ingrese Apellido\n");
>
>     scanf("%s",nuevoDato.Apellido);
>
>     printf("Ingrese Edad\n");
>
>     scanf("%s",nuevoDato.Edad);
>
>     return nuevoDato;
>
> }
>
>
>
> int main(void)
>
> {
>
>     printf("Programa para crear una lista de datos\n ");
>
>     Lista l;
>
>     l=(Lista)malloc(sizeof(tipoNodo));
>
>     l->anterior=l->siguiente=NULL;
>
>     int opcion=1;
>
>     tiposData dato;
>
>     do
>
>     {
>
>         printf("Si desea ingresar un dato presione 1 de lo contrario salga
> con cualquier letra\n");
>
>         scanf("%d",&opcion);
>
>         if(opcion==1)
>
>         {
>
>            dato = ingresarDatos();
>
>            Insertar(&l,dato);
>
>            mostrar(&l);
>
>         }
>
>     }while(opcion==1);
>
>
>
>
>
>     return 0;
>
> }
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ



-- 
Christian Reyes Garcia.




Más información sobre la lista de distribución Cconclase