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:
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:
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:
También estás usando instrucciones prohibidas:
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//Mientras sea diferente del - leera el texto
for (i = 0; especie[i] != '-'; i++) {
e.nombre[i] = especie[i];
}
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 originalprintf("Introduce el nombre: "); scanf("%s",especie.
nombre); // nombre es un array, luego no necesita & printf("Introduce el num de ejemplares: "); scanf("%d", &especie.
num_ejemplares); // num_ejemplares no es un puntero, luego necesita & // ...
O incluso si quieres tener más control sobre los enteros:
Código C:
Ver originalprintf("Introduce el nombre: "); char temp[20];
scanf("%s",especie.
nombre); // nombre es un array, luego no necesita & while(1) // bucle infinito, necesita un break
{
printf("Introduce el num de ejemplares: "); especie.num_ejemplares = my_atoi(temp);
if( especie.num_ejemplares < 0 || especie.num_ejemplares >= 100 )
// ...
}
Tu mayor problema es la falta de base, pero eso solo se consigue empoyando tutoriales.
Un saludo.