Vamos con la solución del ejercicio final. Para hacerlo más comprensible iremos por partes, dividiremos el ejercicio en 3 partes; primero mostraremos las librerías y la definición de la estructura, luego veremos como se introducen todos los datos de los alumnos en la estructura, y por último, la búsqueda del alumno por DNI.
Sin más, veamos como sería la definición de la estructura:
La única novedad respecto al último que hemos utilizado es la inclusión del campo "dni", que será una string de 9 caracteres. Recordad también incluir la librería <string.h>, ya que vamos a utilizar funciones de cadenas de caracteres, y es necesaria esta librería.
Una vez declarada la estructura vamos ya al "main", a realizar el relleno de datos de los alumnos:
Como ya vimos en la lección 38, aquí tenemos que poner un bucle que recorra todo el array de los alumnos e ir introduciendo datos de todos ellos.
Para el nombre utilizamos "gets", que guarda también los espacios en blanco. Para el dni por ejemplo no es necesario, ya que el scanf lo guarda bien sin ningún problema. Y por último la edad, que también la guardamos a través de un scanf.
El "while" de la última línea nos sirve para vaciar el buffer, sin esta línea no funcionaría bien del todo el programa. Cuando hay llamadas a "gets" conviene vaciar el buffer.
Y por último, y aquí viene la parte más complicada del programa, veremos la búsqueda del alumno después de introducir un DNI:
Primero de todo crearemos dos variables, una será una string del dni a buscar, y la otra un bool (verdadero o falso) para saber si se ha encontrado el alumno.
Como el ejercicio pedía que siempre nos pidiera dni hasta que no se introdujera la palabra "salir", entonces tendremos que hacer un bucle.
while (strcmp(dni_buscar, "salir") != 0) //Si el DNI es distinto que "salir"
{ ... }
Utilizaremos la función strcmp para comparar cadenas de caracteres. Si la función devuelve 0 es que son iguales. Por tanto, si la función devuelve algo que sea distinto "!=" de 0, es que el bucle tiene que ejecutarse.
Bien, ahora dentro del bucle lo primero que hacemos es pedir al usuario que introduzca un dni, y lo asignamos a la variable dni_buscar.
Una vez tengamos en la variable el dni del alumno a buscar tendremos que recorrer todo el array de la estructura de alumnos, e ir comprobando uno por uno a ver qué DNI coincide con el que tenemos en la variable dni_buscar.
for (int i = 0; i < 3; i++) //Recorremos el array
{
if (strcmp(dni_buscar, alumnos[i].dni) == 0)
{
encontrado = true; //Alumno encontrado
printf("\nEl alumno con DNI: %s, es el siguiente:\n", dni_buscar);
printf("Nombre: %s\n", alumnos[i].nombre);
printf("DNI: %s\n", alumnos[i].dni);
printf("Edad: %i \n\n", alumnos[i].edad);
}
}
De nuevo nos hará falta la función de comparar cadenas de caracteres. Iremos comprobando en todos los alumnos si el campo alumnos[i].dni es igual a dni_buscar.
En caso de que sea igual, entonces dentro del if se mostrarán los datos de dicho alumno (solo se podría encontrar un alumno, ya que el DNI es algo único de cada alumno).
Fijaos que aparte de mostrar sus datos, también hemos puesto en true la variable encontrado. De esta forma sabremos que se ha encontrado un alumno con ese DNI, y este dato nos servirá para lo que veréis a continuación.
Las últimas líneas del código serán por si se introduce un DNI que no existe en nuestra estructura de alumnos y el programa tiene que mostrar que no se ha encontrado el alumno:
if (encontrado == false && strcmp(dni_buscar, "salir") != 0)
{
printf("No se ha encontrado a ningun alumno con ese DNI.\n\n");
}
Fijaos en la condición doble del if. Si encontrado == false y la cadena dni_buscar es distinto de "salir". ¿Por qué ponemos esta última condición? Porque si no el programa también mostraría esta frase de alumno no encontrado cuando se introduzca "salir"; y no nos interesa, ya que cuando se introduzca la palabra salir el programa acaba sin más, sin mostrar esa frase que solo nos conviene que la muestre cuando un alumno no es encontrado.
El código completo del ejercicio final:
Descargar EjercicioFinal.cpp
Y aquí acaba el curso de C. Esto son los primeros pasos para este lenguaje de programación. Espero que os haya sido de utilidad el curso y ya sabéis que para aprender a programar solo hay una forma de hacerlo... ¡Programando!
Muchas gracias por seguir el curso.
¡Hasta la próxima!