Problema de tipos C

Iniciado por dennis094, 22 Noviembre 2013, 11:11 AM

0 Miembros y 1 Visitante están viendo este tema.

dennis094

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;
}

ivancea96

El retorno es de una persona.

Imprimir te pide un array de diez personas.

rir3760

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|.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language