Como pasar un verctor de struct a una función? #include <stdio.h>
#include <ctype.h>
#include <string.h>
char menu(char *op,int a,char *sub)
{
if(a==0)
{
printf("Este programa dá de alta y baja de alumnos, así como también muestra una consulta de todos los alumnos.\n");
printf("Menú\nA< Altas\nB< Bajas\nC< Consultas\nS< Salir\n");
*op=getchar ();
}
else
{
getchar();
printf("\nMenu de consultas\nIngrese la manera en la que quiere buscar el Alumno \n");
printf("M< Matricula\n");
printf("N< Nombre\n");
printf("T< Todos\n");
printf("R< Regresar al menu principal\n");
*sub=getchar();
}
}
int busq(struct dato*alumno[100],int m,int *f2,int i,int matri,int f=1)
{
while (m<=i && f==0)
if((alumno[m].matri)==matri)
f=1;
else
m++;
*f2=f;
}
int main ()
{
char op,sub,nom[20];
char inex[]="Inexistente";
int f,f2,f3,f4,i=0,j=0,t=0, m=0,dat;
long int matri;
struct dato
{
char nom[20];
char ape1[20];
char ape2[20];
long int matri;
int anos;
int cred;
}alumno[100];
do
{
dat=0;
menu(&op,dat,&sub);
if(op=='s'||op=='S')
return 0;
switch (op)
{
getchar();
case 'a':
case 'A':
do
{
printf("Ingresa Matricula\n");
scanf("%ld",&matri);
f2=0;
m=0;
busq(dato*alumno[100],m,&f2,i,matri);
if(f2)
{
printf("Este alumno ya fue dado de alta\nPor favor verifique que haya escrito bien la matricula\n");
i=i-1;
}
}
while(f2!=0);
getchar();
printf("Ingresa Nombre\n");
gets(alumno[i].nom);
printf("Ingresa Apellido Paterno\n");
gets(alumno[i].ape1);
printf("Ingresa Apellido Materno\n");
gets(alumno[i].ape2);
printf("Ingrese el numero de años en la BUAP\n");
scanf("%d",&alumno[i].anos);
printf("Ingresa el número de créditos\n");
scanf("%d",&alumno[i].cred);
break;
case 'b':
case 'B':printf("Ingresa Matricula\n");
scanf("%ld", &matri);
f2=0;
m=0;
while (m<=i && f2==0)
if (alumno[m].matri==matri)
f2=1;
else
m++;
if(f2)
{
strcpy(alumno[m].nom,inex);
printf("Matrícula encontrada y dada de baja. \n");
}
else
printf("Matrícula no encontrada. \n");
break;
case 'c':
case 'C':do
{
dat=1;
menu(&op,dat,&sub);
f=1;
switch (sub)
{
case 'm':
case 'M':
printf("Ingresa Matricula\n");
scanf("%ld", &matri);
f3=0;
j=1;
while (j<=i && f3==0)
if (alumno[j].matri==matri)
f3=1;
else
j++;
if (strcmp(alumno[j].nom,inex)==0)
printf("Este alumno está dado de baja\n");
else
if(f3)
{
printf("Nombre: %s, Apellidos: %s %s, Matricula: %ld, Años: %d, Creditos: %d. \n",alumno[j].nom,alumno[j].ape1,alumno[j].ape2,alumno[j].matri,alumno[j].anos,alumno[j].cred);
if((alumno[j].cred/alumno[j].anos)<93)
printf("El alumno es flojo\n");
}
else
printf("Matrícula no encontrada. \n");
break;
case 'n':
case 'N':
getchar();
printf("Ingrese Nombre:\n");
gets(nom);
for(t=1;t<=i;t++)
{
f4=0;
if (strcmp(alumno[j].nom,inex)==0)
printf(" \n");
else
{
if (strcmp(alumno[t].nom,nom)==0)
printf("\nNombre: %s, Apellidos: %s %s, Matricula: %ld, Años: %d, Creditos: %d. \n",alumno[t].nom,alumno[t].ape1,alumno[t].ape2,alumno[t].matri,alumno[t].anos,alumno[t].cred);
else
f4=1;
if((alumno[t].cred/alumno[t].anos)<93)
printf("El alumno es flojo\n");
}
}
if(f4)
printf("Alumno no encontrado\n");
break;
case 't':
case 'T':
for(j=1; j<=i; j++)
{
printf("\nNombre: %s, Apellidos: %s %s, Matricula: %ld, Años: %d, Creditos: %d. \n",alumno[j].nom,alumno[j].ape1,alumno[j].ape2,alumno[j].matri,alumno[j].anos,alumno[j].cred);
if (strcmp(alumno[j].nom,inex)==0)
printf("Este alumno está dado de baja\n");
else
if((alumno[j].cred/alumno[j].anos)<93)
printf("El alumno es flojo\n");
}
break;
case 'R':
case 'r':
f=0;break;
}
}
while(f!=0);
break;
}
getchar ();
}
while(op!='S'||op!='s');
return 0;
} |