Diccionario en C: Programa de Traducción Español-Inglés con Estructuras y Menú
Programa Diccionario en C
A continuación se muestra el código fuente de un programa en lenguaje C que implementa un diccionario español-inglés mediante un menú interactivo. El programa permite añadir palabras, traducirlas y mostrar el contenido completo del diccionario.
Cabeceras y definiciones
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_PAL 100
#define MAX_CAD 20
typedef struct
{
char ingles[MAX_CAD];
char espanyol[MAX_CAD];
} tPalabra;
int menu();
void LeeCadena(char cadena[], int max);
int anyadir_palabra(tPalabra Dicc[], int num);
void traducir_palabra(tPalabra Dicc[], int num);
void mostrar_diccionario(tPalabra Dicc[], int num);Función principal
int main()
{
char identificador_de_la_cadena[MAX_CAD];
tPalabra Diccionario[MAX_PAL];
int num_pal = 0;
int opcion;
printf("PROGRAMA DICCIONARIO\n");
printf("====================\n");
while ((opcion = menu()) != 4)
{
switch (opcion) {
case 1:
{
num_pal = anyadir_palabra(Diccionario, num_pal);
printf("[%d] palabras existentes\n", num_pal);
system("pause");
break;
}
case 2:
{
traducir_palabra(Diccionario, num_pal);
system("pause");
break;
}
case 3:
{
mostrar_diccionario(Diccionario, num_pal);
system("pause");
break;
}
}
}
}Menú de opciones
int menu()
{
int op;
do
{
system("cls");
printf("\n"
"\t1.- Añadir palabra\n"
"\t2.- Traducir palabra\n"
"\t3.- Mostrar diccionario\n"
"\t4.- Salir\n"
"\n"
"Elija una opción: ");
scanf("%d", &op);
while (getchar() != '\n');
} while ((op < 1) || (op > 4));
return op;
}Lectura segura de cadenas
void LeeCadena(char cadena[], int max)
{
char *p;
int n;
p = fgets(cadena, max, stdin);
if (p != NULL)
{
n = strlen(cadena);
if (n > 0 && cadena[n - 1] == '\n')
cadena[n - 1] = '\0';
}
}Añadir palabra al diccionario
int anyadir_palabra(tPalabra Dicc[], int num)
{
if (num >= MAX_PAL)
{
printf("El diccionario está completo\n");
return num;
}
printf("Por favor, introduzca una palabra nueva.\n");
printf("En español: ");
LeeCadena(Dicc[num].espanyol, MAX_CAD);
printf("En inglés: ");
LeeCadena(Dicc[num].ingles, MAX_CAD);
num++;
return num;
}Traducir palabra
void traducir_palabra(tPalabra Dicc[], int num)
{
char cadena[MAX_CAD];
int i, encontrado = 0;
printf("Introduce la palabra a buscar: ");
LeeCadena(cadena, MAX_CAD);
for (i = 0; i < num; i++)
{
if (!strcmp(cadena, Dicc[i].espanyol))
{
printf("%s.\n", Dicc[i].ingles);
encontrado++;
}
else if (!strcmp(cadena, Dicc[i].ingles))
{
printf("%s.\n", Dicc[i].espanyol);
encontrado++;
}
}
if (encontrado == 0)
printf("No se ha encontrado la palabra.\n");
}Mostrar diccionario
void mostrar_diccionario(tPalabra Dicc[], int num)
{
int i;
printf("DICCIONARIO\n\n");
printf(" ESPAÑOL\t\t INGLÉS\n");
printf(" ***\t\t ***\n\n");
for (i = 0; i < num; i++)
{
printf(" %s\t\t\t %s\n", Dicc[i].espanyol, Dicc[i].ingles);
}
}Notas sobre el código
- La constante MAX_PAL limita el número máximo de palabras almacenadas.
- La constante MAX_CAD define la longitud máxima de cada cadena.
- La función LeeCadena elimina el salto de línea final que deja fgets.
- La comparación con strcmp distingue entre mayúsculas y minúsculas.