Me explico es un diccionario que traduce del español al ingles, es mu simple. Pero al traducir no me muestra la 1 palabra correctamente, y si asigno mas de 2 palabras en el diccionario me peta la memoria, alguien con conocimientos de C, puede repasar el codigo y explicarme q pasa ?. Yo creo q es correcto ....
Codigo:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define N 40
typedef struct
{
char *esp;
char *ing;
}trad;
void creardic(trad **,int);
void traducir(trad **,int);
main()
{
trad **p;
int x,y,i;
printf("Cuantas palabras quieres introducir?");
scanf("%d",&y);
fflush(stdin);
p=(trad **)malloc(sizeof(trad )y);
clrscr();
do{
clrscr();
printf("\tMenu\n");
printf("1.-Crear Diccionario.\n");
printf("2.-Traducir.\n");
printf("3.-Salir.\n");
printf("Introduce una opcion:");
scanf("%d",&x);
fflush(stdin);
switch(x)
{
case 1:creardic(p,y);break;
case 2:traducir(p,y);break;
case 3:break;
}
}while(x!=3);
for(i=0;i<y;i++)
{
free(p->esp);
free(p->ing);
}
free(p);
}
void creardic(trad **p,int y)
{
int x,i;
char cadena[N];
clrscr();
for(x=0;x<y;x++)
{
clrscr();
printf("Introduce la paraula:");
gets(cadena);
i=strlen(cadena);
p[x]->esp=(char )malloc(sizeof(char)i);
if(p[x]->esp==NULL)
break;
else
strcpy(p[x]->esp,cadena);
printf("Introduce la traduccion:");
gets(cadena);
i=strlen(cadena);
p[x]->ing=(char )malloc(sizeof(char)i);
if(p[x]->ing==NULL)
break;
else
strcpy(p[x]->ing,cadena);
}
}
void traducir(trad **p,int y)
{
int x;
char cadena[N];
clrscr();
printf("Introduce la palabra:");
gets(cadena);
for(x=0;x<y;x++)
{
if((strcmp(cadena,p[x]->esp)==0))
{
printf("%s",p[x]->ing);
getchar();
break;
}
}
}