Hola, tengo un trabajo y es sobre crear un programa que muestre un menu con opciones, el usuario elige una opción y si elige la opción 1 tiene que introducir una nueva especie en la base de datos.
La condición para que la especie sea introducida es la siguiente:"nombre de la especie"-"numero de ejemplares"(en numeros)-dia/mes/año-"sección (una letra solo en mayusculas)"-"habitaculo (en numeros)"
Por ejemplo: Canis lupus familiaris−20−14/09/2015−H−5
El problema que tengo es que no me esta leyendo bien la cadena, tengo que usar la función atoi, pero no la que viene en la librería, tengo que crear una que ya la tengo, pero no se como aplicarla correctamente. Ya que al introducir la cadena cuando doy al enter me muestra todos los mensajes de error de datos.
Gracias.
La condición para que la especie sea introducida es la siguiente:"nombre de la especie"-"numero de ejemplares"(en numeros)-dia/mes/año-"sección (una letra solo en mayusculas)"-"habitaculo (en numeros)"
Por ejemplo: Canis lupus familiaris−20−14/09/2015−H−5
El problema que tengo es que no me esta leyendo bien la cadena, tengo que usar la función atoi, pero no la que viene en la librería, tengo que crear una que ya la tengo, pero no se como aplicarla correctamente. Ya que al introducir la cadena cuando doy al enter me muestra todos los mensajes de error de datos.
Código [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char nombre[30];
int num_ejemplares;
char sección;
int habitaculo;
int dia;
int mes;
int año;
}Especie;
int menu() {
int op = 0;
printf ("Prototipo de la Reserva natural.\n");
printf ("1. Introducir una nueva especie.\n");
printf ("4. Salir.\n");
printf ("\nIntroduce una opcion: ");
scanf ("%d", &op);
return op;
}
void nuevo() {
Especie e;
int i, j;
char especie [100];
fflush(stdin);
gets (especie);
//Mientras sea diferente del - leera el texto
for (i = 0; especie[i] != '-'; i++) {
e.nombre[i] = especie[i];
}
//Se le suma 1 a la posicion de i ya que terminaria en - y debe comenzar a leer desde lo siguiente
i++;
for (j = i; especie [j] != '-'; j++) {
e.num_ejemplares = especie [j];
//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.\n");
}
}
j++;
//Lee el dia que introducido
for (i = j; especie [i] != '/'; i++) {
e.dia = especie [i];
//Controla que el formato del dia este bien introducido
if (e.dia <= 0 || e.dia > 31) {
printf ("--> Error en el formato de datos.\n");
}
}
i++;
//Lee el mes introducido
for (j = i; especie [j] != '/'; j++) {
e.mes = especie [j];
//Controla que el formato del mes este bien introducido
if (e.mes <= 0 || e.mes > 12) {
printf ("--> Error en el formato de datos.\n");
}
}
j++;
//Lee el año introducido
for (i = j; especie [i] != '-'; i++) {
e.año = especie [i];
//Controla que el formato del año este bien introducido
if (e.año < 1970 || e.año > 2060) {
printf ("--> Error en el formato de datos.\n");
}
}
i++;
//Lee en que sección esta introducido
for (j = i; especie [j] != '-'; j++) {
e.sección = especie [j];
//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.\n");
}
}
j++;
//Al estar en el final tiene que encontrarse con el \0 para saber que es el habitaculo
for (i = j; especie [i] != '\0'; i++) {
e.habitaculo = especie [i];
}
printf ("---> Especie introducida con exito.\n");
}
void mi_atoi(char cad [10]) {
int r = 0;
int i;
for (i = 0; i < 10; i++) {
r = r*10;
r+= cad [i] - '0';
}
}
void ejecutaOpcion(int op) {
switch (op) {
case 1:
nuevo();
break;
default:
break;
}
}
int main() {
int op = 0;
do {
op = menu();
ejecutaOpcion(op);
} while (op != 4);
return 0;
}
Gracias.