En primer lugar tienes el error que menciona aloqui, te falta el
& en el llamado de la función para obtener la dirección de la estructura y poder pasarla por
dirección, no por referencia...el paso por referencia se hace usando referenciadores y es algo que pertecena a C++.
Otro error que tienes es el siguiente:
Código:
void LeerFecha(struct fecha *Date)
{
Date.day=1;
Date.month=2;
Date.year=3;
}
Debería ser algo así:
Código:
void LeerFecha(struct fecha *Date)
{
Date->day=1;
Date->month=2;
Date->year=3;
}
O algo así:
Código:
void LeerFecha(struct fecha *Date)
{
(*Date).day=1;
(*Date).month=2;
(*Date).year=3;
}
Recuerda que estás pasando un puntero y debes desreferenciarlo para poder acceder a su contenido. Las dos formas que te coloqué son equivalentes, aunque yo prefiero la primera, es más limpia y fácil de leer.
@TemplarK :
Cita: Mas que aclarar o responder a tu pregunta yo vengo a complicarla, me he perdido un poco, si los arreglos se pasan a funciones solo por referencia, los arreglos de estructuras, estimo tambien lo hacen, sin embargo en el codigo que inserto a continuacion en la funcion debo trabajar con (.) en lugar de (->) a que se debe??
...
Los arreglos se pasan por dirección, los arreglos de estructuras o de lo que sea también. Debes trabajar con el "." porque al acceder al arreglo usando el operador "[]" estás dereferenciando el puntero (la segunda forma que coloqué antes), si quisieras acceder a la pos 2 del arreglo lo harías así:
Código:
...
arreglo[2].edad = 20;
...
pero también podrías acceder así:
Código:
...
(arreglo +2)->edad = 20;
...
Tomen en cuenta que lo que se coloca entre corchetes ("[]") es el desplazamiento con respecto a la primera posición de memoria del arreglo.
Cita: ...
otro punto que me confunde es que si no uso fflush(stdin); no me permite ingresar los datos... que estoy haciendo mal?
...
Debes usarlo porque la función gets te obliga a ello.
Saludos