elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema de tipos C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema de tipos C  (Leído 1,990 veces)
dennis094

Desconectado Desconectado

Mensajes: 185


Embrace your dreams, protect your honor


Ver Perfil
Problema de tipos C
« en: 22 Noviembre 2013, 11:11 am »

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:

Código:
#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;
}


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema de tipos C
« Respuesta #1 en: 22 Noviembre 2013, 15:06 pm »

El retorno es de una persona.

Imprimir te pide un array de diez personas.


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema de tipos C
« Respuesta #2 en: 22 Noviembre 2013, 18:11 pm »

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):
Código
  1. struct persona *leer(struct persona persona[])
  2. {
  3.   int i;
  4.  
  5.   for (i = 0; i < NUM_PERSONAS; i++){
  6.      /* ... Lectura ... */
  7.   }
  8.  
  9.   return persona;
  10. }

La función "imprimir" recibe ese puntero y retornar nada (void):
Código
  1. void imprimir(struct persona persona[])
  2. {
  3.   int i;
  4.  
  5.   for (i = 0; i < NUM_PERSONAS; i++){
  6.      /* ... Escritura ... */
  7.   }
  8. }

Por ultimo en la función main debes declarar el array, lo usual es indicar el numero de elementos con una macro:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define NUM_PERSONAS 2
  5.  
  6. /* ... */
  7.  
  8. int main(void)
  9. {
  10.   struct persona persona[NUM_PERSONAS];
  11.  
  12.   imprimir(leer(persona));
  13.  
  14.   return 0;
  15. }

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
En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
problema con los tipos de dvd virgen
Software
Marianna 1 2,768 Último mensaje 19 Junio 2006, 02:13 am
por Red Mx
problema con tipos genericos...
Java
vacio 2 4,400 Último mensaje 15 Noviembre 2007, 19:19 pm
por vacio
Problema de asignacion (diferentes tipos)
Programación C/C++
soyloqbuskas 4 3,532 Último mensaje 28 Septiembre 2012, 16:21 pm
por anonimo12121
Problema con los tipos en una inclusión doble.
Programación C/C++
Alcarendor 0 1,308 Último mensaje 3 Diciembre 2013, 01:21 am
por Alcarendor
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines