Foros del Web » Programación para mayores de 30 ;) » C/C++ »

paso de estructuras a funciones

Estas en el tema de paso de estructuras a funciones en el foro de C/C++ en Foros del Web. He encontrado el siguiente ejemplo que pasa una estructura entera a una función, dicha función se llama suma que calcula cuál será la edad dentro ...
  #1 (permalink)  
Antiguo 27/07/2010, 06:20
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 9 meses
Puntos: 0
paso de estructuras a funciones

He encontrado el siguiente ejemplo que pasa una estructura entera a una función, dicha función se llama suma que calcula cuál será la edad dentro de 20 años:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. struct estructura_amigo {
  4.     char nombre[30];
  5.     char apellido[40];
  6.     char telefono[10];
  7.     int edad;
  8.     };
  9.  
  10. struct estructura_amigo amigo = {
  11.     "Juanjo",
  12.     "López",
  13.     "983403367",
  14.     30
  15.     };
  16.  
  17. int suma( struct estructura_amigo );
  18.  
  19. main()
  20. {
  21.     printf( "%s tiene ", amigo.apellido );
  22.     printf( "%i años ", amigo.edad );
  23.     printf( "y dentro de 20 años tendrá %i.\n", suma(amigo) );
  24. }
  25.  
  26. int suma( struct estructura_amigo arg_amigo )
  27. {
  28.     return arg_amigo.edad + 20;
  29. }

Yo lo he modificado con el fin de poder introducir los datos de teclado, pero cuando lo ejecuto me dice que el programa dejó de funcionar. ¿Dónde está el fallo?
Esta es la modificación:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. struct estructura_amigo {
  4.     char nombre[30];
  5.     int edad;
  6.     };
  7.  
  8. struct estructura_amigo amigo[3];
  9. struct estructura_amigo *arg_amigo;
  10.  
  11. int suma( struct estructura_amigo * );
  12.  
  13. int main()
  14. {
  15.     int i;
  16.     for(i=0; i<3; i++){
  17.       printf("Nombre: ");
  18.       scanf( "%29s",amigo[i].nombre);
  19.       printf("Edad: ");
  20.       scanf( "%d", &amigo[i].edad );
  21.     }
  22.     for(i=0; i<3; i++)
  23.       printf( "%s tendra %d anios dentro de 20 anios.\n",arg_amigo->nombre,arg_amigo->edad,suma(&amigo) );
  24.     getchar();
  25.     getchar();
  26. }
  27.  
  28. int suma( struct estructura_amigo *arg_amigo )
  29. {
  30.     return arg_amigo->edad + 20;
  31. }
  #2 (permalink)  
Antiguo 27/07/2010, 10:57
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: paso de estructuras a funciones

¿Podéis ayudarme con este ejercicio, por favor?
¿Podéis explicarme brevemente cómo se pasa una estructura a función?. Gracias.
  #3 (permalink)  
Antiguo 27/07/2010, 11:36
 
Fecha de Ingreso: mayo-2008
Ubicación: Chile
Mensajes: 189
Antigüedad: 16 años, 6 meses
Puntos: 3
Respuesta: paso de estructuras a funciones

estas accediendo mal al array, asi me funciona a mi:
Código PHP:
#include <stdio.h>
 
struct estructura_amigo 
{
    
char nombre[30];
    
int edad;
};
 
struct estructura_amigo amigo[3];
struct estructura_amigo *arg_amigo
 
int sumastruct estructura_amigo*arg_amigo);
 
int main()
{
    
int i;
    for(
i=0i<3i++){
      
printf("Nombre: ");
      
scanf"%29s",amigo[i].nombre);
      
printf("Edad: ");
      
scanf"%d", &amigo[i].edad );
    }
    for(
i=0i<3i++)
      
printf"%s tendra %d anios dentro de 20 anios.\n",amigo[i].nombresuma(&amigo[i]) );
    
getchar();
    
getchar();
}
 
int sumastruct estructura_amigo *arg_amigo )
{
    return 
arg_amigo->edad 20;

PD: no se si a ti te pasa, pero intenta poner como nombre juan carlos, y dara error

yo te recomiendo usar c++, asi con la funcion gets(); no pasara esto.
__________________
si tienes entre 18 y 20 años... entonces tienes 19 años xD
  #4 (permalink)  
Antiguo 27/07/2010, 14:01
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: paso de estructuras a funciones

Muchas gracias por la ayuda, me estaba dando dolor de cabeza.

Etiquetas: estructuras, funciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:18.