Arrays de estrocturas

Iniciado por Gotttlieb, 26 Abril 2011, 18:12 PM

0 Miembros y 2 Visitantes están viendo este tema.

Gotttlieb

Buenas. Necesito de vuestros conocimientos   :P

Estoi haciendo un programa para el colegio  que requiere de arrais de estrocturas. El problema me lo encuentro cuando intento hacer la introduccion de datos en el arrai. Si le intento meter la variable "i"
ej:

printf("Introduzca el nombre del piloto\n");
fflush(stdin);
gets(piloto2[i]->nombre);

Me da el error "La expresion debe tener un tipo de puntero" en cambio como lo tengo:


void introducir(piloto piloto2[])
{
int i=0;
printf("Introduzca el dorsal del piloto\n");
fflush(stdin);
scanf("%d",piloto2->dorsal);
printf("Introduzca el nombre del piloto\n");
fflush(stdin);
gets(piloto2[i]->nombre);
printf("Introduzca la escuderia del piloto\n");
fflush(stdin);
gets(piloto2->escuderia);
printf("Introduzca la altura del piloto\n");
fflush(stdin);
scanf("%f",piloto2->altura);
}


No me da error pero. Pero entonces no veo la forma de hacer que me lo coloque en la posicion que yo quiero.

Muchas gracias por vuestro tiempo  ;)



El_Java

Te recomienda que te leas esto, no es recomendable usar fflush(stdin) ni gets() http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Por lo de tu programa, imagino que tu error está en usar ->, ya que esto se usa para asignar elementos de un puntero, lo usarias si tu iniciaras piloto2 como "piloto* piloto2[2]". Deberias usar "piloto2[ i ].nombre" y no te daria error.

Y el otro código no te da error creo que porque has tenido suerte, te explico:
Lo primero saber que un puntero y un array son equivalentes.
Con el operador "->", le dices al compilador que lo anterior era un puntero, si colocas "piloto2[ i ]->nombre" le dices al compilador que es un puntero cuando no lo es, sino que le asignas el array [ i ], en cambio cuando pones "piloto2->nombre" le dices que es un puntero y efectivamente "lo es", ya que no le asignas el array "[ i ]".
El algo dificil de explicar al menos para mi, espero que lo entendieras

Gotttlieb

#2
Gracias Java... me has salvado horas de "asqueamiento".

Y otro error tonto por mi parte el equivocarme con el -> en  vez de poner el " ."

PD: Lo del fflush(stdin) ya lo se pero esque nos obligan a ponerlo en el cole  a parte que a mi por desgracia la mayoria de veces sin el se me salta las entradas.



El_Java

Tranquilo, a todos nos ha pasado (a mí el primero).
Si te obligan a ponerlo hazlo (aunque lo veo raro, a mí me dan libertad para usar las funciones que quiera), pero ten en cuenta que siempre hay alternativas ;)