Problema con arreglos, estructuras y funciones

Iniciado por ody532, 20 Abril 2017, 03:26 AM

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

ody532

Tengo un problema, tengo 3 funciones el main y 2 creadas por mi una de registro y otra de impresion
el problema es que es una estructura con arreglos, al registrar no hay problema pero nose como mandar estos registros al main y que de ahi se impriman con la funcion de impresion

debe de ser en lenguaje C y no puedo declarar en el area global el arreglo, espero me puedan ayudar

este es el programa que llevo:

#include<stdio.h>
#include<stdlib.h>
struct alumnos
{
int matricula;
char nombre[50];
char apellido[50];
char correo[50];
char celular[12];
int cal[7];
};
int registro(struct alumnos b[], int elementos);
void impresion_datos(struct alumnos b[], int elementos);
int main()
{
struct alumnos a[50];
int op,z=0;
while(z<50)
{
printf("teclee la opcion que desea realizar:  ");
printf("\n1. Registrar los datos del alumno\n2.Modificar alumno\n3. Eliminar alumno\n4. Imprimir los datos de los alumnos\n5. Imprimir calificaciones de los alumnos\n6. Salir");
scanf("%d",&op);
system("cls");
switch (op)
{
case 1: registro(a,50);break;
case 2: impresion_datos(a,50); break;
}
z++;
}
}
int registro(struct alumnos b[], int elementos)
{
int q;
int c;
int i=0;
int ca=0;
int op3;

printf("Matricula:  "); scanf("%d", &b[i].matricula); fflush(stdin);
printf("\nNombre:  "); gets(b[i].nombre); fflush(stdin);
printf("\nApellido:  "); gets(b[i].apellido); fflush(stdin);
printf("\nCorreo:  "); gets(b[i].correo); fflush(stdin);
printf("\nCelular"); gets(b[i].celular); fflush(stdin);
for(q=0;q<6;q++)
{
printf("\n Cal %d del alumno %d:  ",q,i); scanf("%d",&b[i].cal[q]); fflush(stdin);
b[i].cal[6]=((b[i].cal[0]*.20)+(b[i].cal[1]*.20)+(b[i].cal[2]*.20)+(b[i].cal[3]*.20)+(b[i].cal[4]*.10)+(b[i].cal[5]*.10));
}
ca=ca+1;
for(i=0;i<ca;i++)
{
for(q=0;q<7;q++)
{
printf ("cal %d del alumno %d:   ",q,i); printf("%d\n", b[i].cal[q]);
}
}
printf("para regresar al menu presione 1:  "); scanf("%d",&op3);
system("cls");
}
void impresion_datos(struct alumnos b[], int elementos)
{
int i;
printf("Matricula\t\tNombre\t\t\tApellido\t\tCelular\t\tCorreo");
for(i=0;i<50;i++)
{
printf("%d\t\t",b[i].matricula);
printf("%d\t\t",b[i].nombre);
printf("%d\t\t",b[i].apellido);
printf("%d\t\t",b[i].celular);
printf("%d\t\t",b[i].correo);
}
}[/b]



· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

MAFUS

Tienes unos cuantos errores, pero empecemos por el primero:
La lógica de la función main está mal planteada. Repites 50 veces en bucle la función y no puedes salir de él aunque uses la función 6 del menú. Eso no debería ser así sino que el bucle debería repetirse mientras no se elija la función 6.

Cuando soluciones eso podremos continuar.

ody532

Cita de: MAFUS en 20 Abril 2017, 10:01 AM
Tienes unos cuantos errores, pero empecemos por el primero:
La lógica de la función main está mal planteada. Repites 50 veces en bucle la función y no puedes salir de él aunque uses la función 6 del menú. Eso no debería ser así sino que el bucle debería repetirse mientras no se elija la función 6.

Cuando soluciones eso podremos continuar.



Pero y si en la opcion 6 le pongo z=49 y se suma con el z++ se saldria del ciclo y terminaria no?

MAFUS

Sí, pero de seguro ese no es el efecto que debes buscar. ¿Por qué repites 50 veces el bucle? Porqué no es por las 50 posiciones del array porqué eso debes tratarlo de otra forma.

Los menús se hacen de otra forma:
Algo así:
- BUCLE MENÚ
- Imprime Título
- Imprime primera opción
- Imprime segunda opción
- ...
- Imprime la opción de salida
-
- Pide la opción a elegir
- Si la opción no está en el menú repetir el menú
- Asociar a cada opción una función diferente, cada función iniciará el trabajo que se espera.
- Si la opción elegida es la de salir terminar el BUCLE MENÚ
- Repetir el BUCLE MENÚ