Buenas, estoy intentando desarrollar un programa para practicar con structs y me piden que almacene informacion de personas, una vez hecho eso me piden almacenar la informacion de 2 personas (o mas) leida por teclado, e imprimirla.
Las funciones leer e imprimir deben ser diferentes, no puede leer e imprimir en la misma funcion.
Lo que tengo es esto, y en la penultima linea, cuando llamo a la funcion imprimir me da un error de tipos.
(En la funcion leer me da un error "leve" que me dice que no encuentra return, pero si lo saco fuera del for creo que no va a funcionar como debe).
Os dejo el codigo:
#include <stdio.h>
#include <stdlib.h>
// nombre sexo y edad (personas)
//a) leer; b) mostrar
struct persona{
char nombre[50];
char sexo[10];
int edad;
};
struct persona leer (void){
struct persona p[10]; // creamos las personas correspondientes
int i;
for (i=0;i<2;i++){
printf("Nombre: ");
gets(p[i].nombre);
printf("\nSexo: ");
gets(p[i].sexo);
printf("\nEdad: ");
scanf("%d", &p[i].edad);
fflush(stdin); // limpia el buffer de entrada despues de leer un entero
return p[i];
}
}
void imprimir(struct persona p[10]){
int i;
for(i=0;i<2;i++){
printf("\n\n%s, %s de %d anyos.\n", p[i].nombre, p[i].sexo, p[i].edad);
}
}
int main(void) {
//leer();
imprimir(leer());
return 0;
}
El retorno es de una persona.
Imprimir te pide un array de diez personas.
Como ya te indico ivancea96 el error se debe al tipo de retorno de la función "leer" y el argumento que espera la función "imprimir".
La función "leer" debe recibir como argumento el nombre del array y retornar el mismo (es en realidad un puntero, eso ya lo veras mas adelante):
struct persona *leer(struct persona persona[])
{
int i;
for (i = 0; i < NUM_PERSONAS; i++){
/* ... Lectura ... */
}
return persona;
}
La función "imprimir" recibe ese puntero y retornar nada (void):
void imprimir(struct persona persona[])
{
int i;
for (i = 0; i < NUM_PERSONAS; i++){
/* ... Escritura ... */
}
}
Por ultimo en la función main debes declarar el array, lo usual es indicar el numero de elementos con una macro:
#include <stdio.h>
#include <stdlib.h>
#define NUM_PERSONAS 2
/* ... */
int main(void)
{
struct persona persona[NUM_PERSONAS];
imprimir(leer(persona));
return 0;
}
Ademas deberías manejar el sexo como una variable de tipo char ('M', 'F', etc.). También debes evitar el uso de gets y fflush(stdin), mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).
Un saludo