Estoy tratando de crear un diccionario en C. Básicamente, el usuario crea el diccionario por sí mismo, ingresando una palabra y luego una definición. He creado una función donde se muestra el diccionario, que muestra cada entrada y su definición. Sin embargo, estoy recibiendo este error:
error: ‘diccionario’ no declarado (primer uso en esta función)
Aquí está el código que he escrito:
#include void display (char *array) { int i; for (i=0; i<11; ++i) printf("%s %s", dictionary[i][0], dictionary[i][1]); } int main(void) { char *dictionary[10][2]; int command; int i; while (command != 3) { printf ("1. Define or 2. Lookup or 3. Exit"); scanf ("%d", &command); if (command == 1) { for (i=0; i<11; ++i) { printf("Please enter a word to define:"); scanf("%s\n", dictionary[i][0]); printf("Please enter its definition:"); scanf("%s", dictionary[i][1]); break; } } if (command == 2) display(dictionary); } return 0; }
¿Puede alguien explicar lo que estoy haciendo mal?
dictionary
es una variable local en una función diferente.
Su parámetro se llama array
.
Su dictionary
variables está fuera de scope. Prueba esto,
if (command == 2) { for (i=0; i<11; ++i) printf("%s %s", dictionary[i][0], dictionary[i][1]); }
En la display
, el diccionario no está declarado. Que simple
En la función de visualización cambiar el dictionary
a la array
dictionary
es una variable local dentro de la main
, a la que no se puede acceder directamente desde su función; en cambio, tiene su array
parámetros para ese uso, que está vinculada al primer argumento especificado cuando se llama a la función.
Pero hay otro problema: declaraste el parámetro incorrectamente. Las matrices multidimensionales se deben pasar de una manera particular:
void display (char array[][2]) { int i; for (i=0; i<11; ++i) printf("%s %s", array[i][0], array[i][1]); }
Es decir, se deben especificar todas las dimensiones (excepto opcionalmente la primera), de lo contrario el comstackdor no puede saber cómo alcanzar los elementos que solicita.
Después de que hayas cambiado el dictionary
a la array
dentro de la display()
, puedes obtener otro comportamiento extraño …
char *dictionary[10][2]; for (i=0; i<11; ++i) {