Duda con struct y funciones (aprendiendo)

Iniciado por Isiaas1999, 23 Noviembre 2018, 02:47 AM

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

Isiaas1999

Hola buenas como andan, les queria comentar que me sale un error al hacer la llamada a la funcion, precisamente en la parte cuando sale los parmetros. Me podrian dar una mano :'(



#include<stdio.h>
#include<stdlib.h>
#include<string.h>



void carga(struct registro datos2 ,int n);

struct registro
{
    char nombre[100];
   int numpaciente;
    char obraSocial[50];

   
};

int main()
{
   struct registro datos[50];
   int n;
   printf("Ingrese la cantidad de pacientes:  ");
   scanf("%d",&n);
   carga(datos ,n);
   
}


void carga(struct registro datos2,int n )
{
   
   int i;
for (i=0;i<n;i++)
{  _flushall();
   printf("ingrese el nombre del paciente");
   gets(datos2.nombre);
   printf("ingrese el numeros del pas:");
   scanf("%d",&datos2.numpaciente);
   printf("ingrese su obra social : ");
   gets(datos2.obraSocial);
   
}
   return 0;
}


AlbertoBSD

#1
Hola que tal , es un poco inexacto lo que haces.

Si te interesa el programa funcional date una vuleta por este tema:

Plantillas programas escolares en C

Los errores de tu codigo acontinuacion:

struct registro {
char nombre[100];
int numpaciente;
char obraSocial[50];
};


void carga(struct registro datos2 ,int n);


debes de escribir primero el struct, antes de ponerlo como parametro en cualquier prototipo de funcion.

La funcion Carga solo recibie un Registro, no un arreglo de registro.

Aqui lo declaras que solo recibe uno:

void carga(struct registro datos2,int n);

Y aqui le pasas un arreglo de 50 registros:


carga(datos ,n);  

Eso no se puede hacer.

Luego tambien no es preciso

printf("Ingrese la cantidad de pacientes:  ");
scanf("%d",&n);


Ya que si n es mayor que 50 te saldras del limite de arreglos que declaraste.

Hay otros detalles que hay que validar pero si no arreglas esos primeros te vas a revolver.

Si lo manejas como apuntador podrias pasar el parametro directamente:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct registro {
char nombre[100];
int numpaciente;
char obraSocial[50];
};


void carga(struct registro *datos,int n);

int main() {
struct registro datos[50];
int n;
printf("Ingrese la cantidad de pacientes:  ");
scanf("%d",&n);
if(n < 50)
carga(datos ,n);
}

void carga(struct registro *datos,int n ) {
int i;
for (i=0;i<n;i++) {  
_flushall();
printf("ingrese el nombre del paciente");
gets(datos[i].nombre);
printf("ingrese el numeros del pas:");
scanf("%d",&datos[i].numpaciente);
printf("ingrese su obra social : ");
gets(datos[i].obraSocial);
}
return 0;
}


Hay mucha cosas inseguras en tu codigo por ejemplo gets puedes meter la cantidad de caracteres que quieras si metes mas de 100 caracteres el código tronar, mas específicamente caes en un buffer overflow.

Revisa el link que te pase, maneja correctamente los limites.

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW