Ver Mensaje Individual
  #4 (permalink)  
Antiguo 07/04/2016, 09:18
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: ¿Como puedo guardar datos previamente escritos de una cadena a un array?

Estás demasiado perdido. Necesitas con urgencia hacerte con un libro o tutorial de Internet de C y dedicar algunas horas a su estudio.

Tu programa tiene unos cuantos fallos y problemas de diseño:
Código C:
Ver original
  1. void nuevo() {
  2.   Especie e;

Por ejemplo, si esta función sirve para crear nuevos elementos... ¿Dónde se supone que los almacena? Si la práctica es sencilla seguramente te valiese con un array de tamaño fijo, como por ejemplo:

Código C:
Ver original
  1. Especie datos[20];
  2. int numDatos;

La variable entera te sirve para saber cuántos registros están ocupados (0 a numDatos-1). Eso sí, tienes que preocuparte de no insertar nunca un elemento nº 21.

Con el array anterior creado ya podrías añadir elementos nuevos al array. Eso lo puedes hacer donde quieras, dentro de la función nuevo o fuera, y el proceso podría ser tal que:

Código C:
Ver original
  1. datos[numDatos] = especie;
  2. numDatos++;

También estás usando instrucciones prohibidas:

Código C:
Ver original
  1. fflush(stdin);

fflush sirve para que los buffer de salida vuelquen su salida a donde corresponda, pero sus resultados con los buffer de entrada (y stdin es de entrada) son indefinidos, lo que implica que, en el mejor de los casos, no va a vaciar stdin.

También estás complicando en exceso la lectura de los datos:

Código C:
Ver original
  1. gets (especie);
  2. //Mientras sea diferente del - leera el texto
  3. for (i = 0; especie[i] != '-'; i++) {
  4.     e.nombre[i] = especie[i];
  5. }

Por un lado especie[ i] es algo que no va a compilar porque especie no es un array sino un único registro, luego no tiene índice.

Por otro, ¿qué pasaría si el usuario no introdujese ningún guión? El resultado no te iba a gustar nada.

Y, finalmente, has de saber que hay formas más sencillas de pedir datos al usuario. No hace falta que le obligues al usuario a introducir todo el texto del tirón separado por guiones (salvo que sea una exigencia de la práctica).

Un mecanismo más limpio podría ser:

Código C:
Ver original
  1. printf("Introduce el nombre: ");
  2. scanf("%s",especie.nombre); // nombre es un array, luego no necesita &
  3. printf("Introduce el num de ejemplares: ");
  4. scanf("%d", &especie.num_ejemplares); // num_ejemplares no es un puntero, luego necesita &
  5. // ...

O incluso si quieres tener más control sobre los enteros:

Código C:
Ver original
  1. printf("Introduce el nombre: ");
  2. char temp[20];
  3. scanf("%s",especie.nombre); // nombre es un array, luego no necesita &
  4. while(1) // bucle infinito, necesita un break
  5. {
  6.   printf("Introduce el num de ejemplares: ");
  7.   scanf("%s", temp);
  8.   especie.num_ejemplares = my_atoi(temp);
  9.   if( especie.num_ejemplares < 0 || especie.num_ejemplares >= 100 )
  10. // ...
  11. }

Tu mayor problema es la falta de base, pero eso solo se consigue empoyando tutoriales.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.