[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