[ Foro de C ]
Estoy haciendo un programa que lea nombre del teclado y inserte cada nombre en los nodos de una lista para luego mostrarlos, cuando ingreso un solo nombre me lo muestra pero al ingresar mas el programa se me finaliza a la hora de mostrarlas, creo que el error esta en la función ENLISTAR, a continuación les dejo el código:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
typedef struct t_nodo{
struct t_nodo *psig;
char *nombre;
}nodo;
typedef struct t_lista{
nodo *pinicio;
int tam;
}lista;
void inicializar (lista *l){
l->pinicio=NULL;
l->tam=0;
}
int enlistar (lista *l, char *nombre ){
nodo *aux;
nodo *nuevo_el;
if ((nuevo_el = (nodo *) malloc (sizeof (nodo))) == NULL)
return -1;
if ((nuevo_el->nombre = (char *) malloc (50 * sizeof (char)))
== NULL)
return -1;
strcpy(nuevo_el->nombre,nombre);
if(l->tam==0){
l->pinicio=nuevo_el;
}
else {
aux=l->pinicio;
while(aux->psig!=NULL){
aux=aux->psig;
}
aux->psig=nuevo_el;
}
nuevo_el->psig=NULL;
l->tam++;
}
void mostrar (lista *l){
nodo *aux;
aux=l->pinicio;
if(l->tam==1){
printf("Nombre: %s",aux->nombre);
}
else{
while(aux->psig!=NULL){
printf("Nombre: %s", aux->nombre);
aux=aux->psig;
}
}
}
int main(){
lista *ll;
char *nom;
bool opcion;
opcion=1;
if ((ll = (lista *) malloc (sizeof (lista))) == NULL)
return -1;
if ((nom = (char *) malloc (50 * sizeof (char))) == NULL)
return -1;
inicializar(ll);
while(opcion){
printf("Digite un nombre:");
scanf("%s",nom);
enlistar(ll,nom);
printf("Desea ingresar otro nombre? 1 SI / 0 N0: ");
scanf("%d",&opcion);
}
mostrar(ll);
}
Buenas por lo que he podido ver, el problema está en el while de la funcion mostrar, ya que utilizas el puntero a la estructura siguiente como condicion de la sentencia while.
Cuando llega a la última estructura el puntero siguiente es nulo y finaliza el while sin mostrar el último nombre.
Cambia la condicion, por ejemplo con la cantidad de estructuras "tam" y verás que te muestra todos los nombres.
Saludos
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)