Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/04/2016, 07:36
herdo96
 
Fecha de Ingreso: abril-2016
Mensajes: 2
Antigüedad: 8 años, 8 meses
Puntos: 0
Pregunta ¿Como puedo guardar datos previamente escritos de una cadena a un array?

Hola, estoy haciendo trabajo y es un programa que te permite introducir datos de una especie en una cadena y luego mostrarlos. Ya tengo hecha la parte de comprobar errores y que la cadena con los datos este correctamente introducida. Lo único que me falta es mostrar distintos datos en pantalla, pero no se como hacerlo, creo que es con un array ya que solo puedes ingresar hasta 10 datos. Lo que no se es en que parte implementar el codigo. He visto que se puede hacer esto con ficheros, el problema es que aun no se como implementar un fichero.

Código:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
    char nombre[30];
    int num_ejemplares;
    char seccion;
    int habitaculo;
    int dia;
    int mes;
    int anio;
}Especie;
 
int menu() {
 
    int op = 0;
 
    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");
    printf ("\nIntroduce una opcion: ");
    scanf ("%d", &op);
 
    return op;
}
 
void nuevo() {
 
    Especie e;
    int i, j;
    char especie[100];
    char aux[10];                   //variable auxiliar usada para reemplazar el valor de la cadena especie
    printf("Introduce los datos:\n");
    //Se hace un fflush para que no haya algun problema con el numero introducido en el menu
    fflush(stdin);
    gets (especie);
    //Mientras sea diferente del - leera el texto
    for (i = 0; especie[i] != '-'; i++) {
        e.nombre[i] = especie[i];
    }
    e.nombre[i] = '\0';
    i++;
    //Se le suma 1 a la posicion de i ya que terminaria en - y debe comenzar a leer desde lo siguiente
    for (j = 0; especie[i] != '-'; i++,j++) {
        aux[j] = especie[i];
    }
    aux[j] = '\0';
    e.num_ejemplares = mi_atoi(aux);
    //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");
    }
    i++;
    //Lee el dia introducido
    for (j = 0; especie[i] != '/'; i++, j++) {
         aux[j] = especie[i];
    }
    aux[j] = '\0';
    e.dia = mi_atoi(aux);
    //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 = 0; especie[i] != '/'; i++, j++) {
        aux[j] = especie[i];
    }
    aux[j] = '\0';
    e.mes = mi_atoi(aux);
    //Controla que el formato del mes este bien introducido
    if (e.mes <= 0 || e.mes > 12) {
        printf ("--> Error en el formato de datos.\n");
    }
    i++;
    //Lee el año introducido
    for (j = 0; especie[i] != '-'; i++, j++) {
        aux[j] = especie[i];
    }
    aux[j] = '\0';
    e.anio = mi_atoi(aux);
    //Controla que el formato del aÒo este bien introducido
    if (e.anio < 1970 || e.anio > 2060) {
        printf ("--> Error en el formato de datos.\n");
    }
    i++;
    //Lee en que seccion esta introducido
    e.seccion = especie[i];
    //Controla que la seccion este introducida con mayusculas
    if (e.seccion < 'A' || e.seccion > 'Z') {
        printf ("--> Error en el formato de datos.\n");
    }
    //Al estar en el final tiene que encontrarse con el \0 para saber que es el habitaculo
    i+= 2;
    for (j = 0; especie[i] != '\0'; i++, j++) {
        aux[j] = especie[i];
    }
    aux[j] = '\0';
    e.habitaculo = mi_atoi(aux);
    if (e.habitaculo < 0 || e.habitaculo > 20) {
        printf ("--> Error en el formato de datos.\n");
    }
}
 
int mi_atoi(char cad[10]) {
    int r = 0;
    int i;
    for (i = 0; cad[i] != '\0'; i++) {
       r = r * 10;
       r += cad[i] - '0';
    }
    return r;
}
 
void listar () {
}
 
void estadisticas() {
}
 
void ejecutaOpcion(int op) {
 
    switch (op) {
        case 1:
            nuevo();
            break;
        case 2:
            listar();
            break;
        case 3:
            estadisticas();
            break;
        default:
            break;
    }
}
 
int main() {
 
    int op = 0;
 
    do {
        op = menu();
        ejecutaOpcion(op);
    } while (op != 4);
    return 0;
}
tambien dejo imagenes de como deberia funcionar el programa
Esta es la primera opcion, ya la tengo hecha porque ya me comprueba que la cadena este bien introducida
http://subefotos.com/ver/?27da5c6038b49de566c23391b835c80ao.jpg
La opcion 2 y 3 son las que me faltan por implementar
http://subefotos.com/ver/?d5db4fbc4b738191a5364a9fd16ffaa5o.jpg
http://subefotos.com/ver/?ac5be9e588a611fcd6df73818008bc63o.jpg