no se porque siempre me imprime la primera posición del arreglo de estructuras de las personas
Porque:
* La función strcmp retorna un valor diferente de cero si las cadenas son distintas, solo retornara cero si son iguales.
+
* El bucle donde se realiza la búsqueda solo se ejecutara una vez ya que en ambas ramas de la sentencia condicional if terminas el bucle con la sentencia "break":
for (i = 0; i < 10; i++) {
if (strcmp (nombreBusqueda
, arregloPersonas
[i
].
nombre)) { /* ... */
break; /* Terminar el bucle si se cumple la condicion del if ... */
}else {
/* ... */
break; /* ... y si no se cumple ... tambien */
}
//posicionBusqueda++;
}
+
* En la primera iteración del bucle se compara la
palabra introducida por el usuario y leída con:
printf ("Escriba el nombre de la persona que busca: "), /* mejor ';' */ scanf ("%s", nombreBusqueda
);
Con el campo "nombre" del primer elemento del array el cual consiste de
dos palabras:
PERSONA arregloPersonas[10] = { { "manu chao", 50}, /* ... */
En buen cristiano no hay forma de que la palabra introducida por el usuario sea igual a esas dos palabras.
Para solucionarlo debes leer la entrada del usuario con fgets (asegurate de eliminar el resto de la linea anterior) y utilizar un bucle sin cuerpo mas o menos así:
for (i
= 0; i
< 10 && strcmp(nombreBusqueda
, arregloPersonas
[i
].
nombre); i
++) ;
if (i != 10 /* Hay que evitar magic numbers, mejor una macro*/)
puts("Nombre encontrado!"); else
puts("El nombre no se encuentra en la base de datos");
Un saludo