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

Como pasar un verctor de struct a una función?

Estas en el tema de Como pasar un verctor de struct a una función? en el foro de C/C++ en Foros del Web. #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 ...
  #1 (permalink)  
Antiguo 09/03/2013, 19:57
 
Fecha de Ingreso: marzo-2013
Mensajes: 3
Antigüedad: 11 años, 9 meses
Puntos: 0
Pregunta 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;
}
  #2 (permalink)  
Antiguo 09/03/2013, 19:59
 
Fecha de Ingreso: marzo-2013
Mensajes: 3
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Como pasar un verctor de struct a una función?

Estoy tratando de pasar la estructura a la función pero me marca error no se que es lo que pasa, si alguien me ayuda se lo agradecería.
  #3 (permalink)  
Antiguo 09/03/2013, 22:42
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 13 años
Puntos: 94
Respuesta: Como pasar un verctor de struct a una función?

Hola! una pregunta, por que declaraste la estructura dentro del main??? Esa forma, sino me equivoco, esta totalmente en desuso(y si aun se puede usar es algo molesto pasarlo a una funcion). SI de donde estudias te indica q lo hagas asi, cambia de material de estudio

La forma general de declarar estructuras es fuera del main osea de forma global y las variables del tipo de la estructura se crean en el main. Ejemplo:
Código C:
Ver original
  1. struct ejemplo { /* estructura global */
  2.   int num;
  3. };
  4.  
  5. int main() {
  6.  
  7.   struct ejemplo var; /* se crea una variable del tipo struct ejemplo */
  8.   /* ........ codigo ...... */
  9.  
  10. return 0;
  11. }


Ahora bien, pasar un vector de estructuras o un vector de int es lo mismo; por lo tanto hacer esto es un error:
Cita:
busq(dato*alumno[100],m,&f2,i,matri); // por que el "*"??
int busq(struct dato*alumno[100],int m,int *f2,int i,int matri,int f=1)
En la funcion tenes seis parametros pero en la llamada solo le pasas cinco. Otra cosa raro es que hagas int f=1... La forma correcta seria:
Código C:
Ver original
  1. busq(alumno,m,&f2,i,matri); // llamada de la funcion
  2. /*..........*/
  3.  
  4. int busq(struct dato alumno[100],int m,int *f2,int i,int matri) {
  5. /*........*/
  6. }


Investiga un poco mas el tema de estructuras y cualquier duda segui preguntando. Saludos

PD: para poner codigo usa la Highlight
  #4 (permalink)  
Antiguo 10/03/2013, 14:16
 
Fecha de Ingreso: marzo-2013
Mensajes: 3
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Como pasar un verctor de struct a una función?

Muchas Gracias eso era lo que me faltaba mover la struct, los parametros erroneos los note hoy en la mañana, pero muchisimas gracias!

Etiquetas: funcion, struct, vectorial
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 19:12.