Hola
Tengo un ejercicio en el cual tengo que almacenar palabras en una lista y luego recibir un valor entero. Si la palabra de la lista es mayor o igual que la longitud que ingrese anteriormente, esa palabra va a ser guardada en una nueva lista.
Estoy intentadolo hacer pero al momento de ejecutar el programa, me da un error de ejecucion en la carga y no le encuentro la falla.
Creo que es un error de carga.
Adjunto el codigo haber si me pueden dar una mano
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct s_nodo
{
char*palabra;
struct s_nodo*sig;
};
typedef struct s_nodo*t_nodo;
void agregar(t_nodo*nodo);
char* carga(void);
void filtrar_palabras(t_nodo,t_nodo*,int);
void imprimir(t_nodo);
int main()
{
int limite;
t_nodo lista=NULL;
t_nodo filtrada=NULL;
agregar(&lista);
agregar(&lista);
agregar(&lista);
agregar(&lista);
printf("Palabras Originales Cargadas: \n");
imprimir(lista);
printf("\nIngrese un limite:");
scanf("%d",&limite);
printf("\nLista Modificada es : \n");
imprimir(filtrada);
return 0;
}
void agregar(t_nodo*nodo)
{
if(*nodo==NULL)
{
*nodo=malloc(sizeof(struct s_nodo));
(*nodo)->palabra=carga();
(*nodo)->sig=NULL;
}
else
{
agregar(&(*nodo)->sig);
}
}
char*carga(void)
{
char*texto=NULL;
int i=0;
char letra;
printf("\nIngrese palabra: ");
letra=getche();
texto=malloc(sizeof(char));
if(texto==NULL)
{
printf("\nError en memoria");
return texto;
}
while(letra!='\r')
{
*(texto+i)=letra;
texto=realloc(texto,(i+i)*sizeof(char));
i++;
letra=getche();
}
*(texto+i)='\0';
return texto;
}
void filtrar_palabras(t_nodo nodo,t_nodo*nodo1,int longitud)
{
if(*(nodo1)=NULL)
{
if((strlen(nodo->palabra))>=longitud)
{
(*nodo1)->palabra=nodo->palabra;
(*nodo1)->sig=NULL;
nodo=nodo->sig;
}
}
else
{
filtrar_palabras(nodo,&(*nodo1)->sig,longitud);
}
}
void imprimir(t_nodo nodo)
{
while(nodo!=NULL)
{
printf(" %s - ",nodo->palabra);
nodo=nodo->sig;
}
}