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 CLos 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: ");
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: "); 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"); 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!