Si te interesa el programa funcional date una vuleta por este tema:
Plantillas programas escolares en C
Los errores de tu codigo acontinuacion:
Código
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:
Código
void carga(struct registro datos2,int n);
Y aqui le pasas un arreglo de 50 registros:
Código
carga(datos ,n);
Eso no se puede hacer.
Luego tambien no es preciso
Código
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:
Código
#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; if(n < 50) carga(datos ,n); } void carga(struct registro *datos,int n ) { int i; for (i=0;i<n;i++) { _flushall(); } 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!