Luego de leer la cadena el programa mostrará por pantalla un mensaje de error en caso de que algo este mal introducido o un mensaje correcto.
El problema que tengo es que no entiendo muy bien como hacer que lea la cadena. Pongo un ejemplo del código que tengo hecho y unas imágenes de como debería funcionar el programa.
Código:
#include<stdio.h>
typedef struct {
char nombre [30];
int num_ejemplares;
char sección;
int habitaculo;
int dia;
int mes;
int anio;
} Especie;
int menu (void) {
printf ("Prototipo de la Reserva natural.\n");
printf ("1. Introducir una nueva especie.\n");
printf ("2. Listar las especies alojadas.\n");
printf ("3. Mostrar estadisticas.\n");
printf ("4. Salir.\n");
}
int main () {
int op;
while (op != 4){
op == menu ();
scanf ("%d", &op);
if (op == 1) {
nuevo ();
}
}
}
//Opcion 1 que permite introducir una nueva especie
void nuevo () {
Especie e;
int i;
char especie [100];
gets (especie);
int cont;
//Mientras sea diferente del - leera el texto
while (especie [i] != '-') {
especie [i] = e.nombre;
}
//Se le suma 1 a la posicion de i ya que terminaria en - y debe comenzar a leer desde lo siguiente
i = i + 1;
while (especie [i] != '-') {
especie [i] = e.num_ejemplares;
//Controlara que el numero de ejemplares sea un numero y no un caracter
if (e.num_ejemplares <= '0' || e.num_ejemplares >= '100') {
printf ("--> Error en el formato de datos.");
}
}
i = i + 1;
//Lee el dia que introducido
while (especie [i] != '/') {
especie [i] = e.dia;
//Controla que el formato del dia este bien introducido
if (e.dia <= 0 || e.dia > 31) {
printf ("--> Error en el formato de datos.");
}
}
i = i + 1;
//Lee el mes introducido
while (especie [i] != '/') {
especie [i] = e.mes;
//Controla que el formato del mes este bien introducido
if (e.mes <= 0 || e.dia > 12) {
printf ("--> Error en el formato de datos.");
}
}
i = i + 1;
//Lee el año introducido
while (especie [i] != '/') {
especie [i] = e.dia;
//Controla que el formato del año este bien introducido
if (e.dia <= 1970 || e.dia >= 2060) {
printf ("--> Error en el formato de datos.");
}
}
i = i + 1;
//Lee en que sección esta introducido
while (especie [i] != '-') {
especie [i] = e.sección;
//Controla que la sección este introducida con mayusculas
if (e.sección < 'A' || e.sección > 'Z') {
printf ("--> Error en el formato de datos.");
}
}
i = i + 1;
//Al estar en el final tiene que encontrarse con el \0 para saber que es el habitaculo
while (especie [i] != '\0') {
especie [i] = e.habitaculo;
//Controlara que el numero de habitaculo sea un numero y no un caracter
if (e.habitaculo <= '0' || e.habitaculo >= '100') {
printf ("--> Error en el formato de datos.");
}
}
printf ("---> Especie introducida con exito.\n");
}
Así es como debería funcionar el programa.
Y así debería dar error.
Otra cosa que no se muy bien como hacerla es sobre los espacios libres, se que tiene que ser con un array de 10 casillas que guarde los datos introducidos.
Perdón si es un desastre el código, pero soy nuevo en esto de la programación.
Gracias.