Funciones, selectivas y repetitivas. (tiene un error al ejecutarse, ayuda!)

Iniciado por jravelar, 4 Junio 2010, 03:52 AM

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

jravelar

Hola, tengo este codico en el compilador dev-c.
El problema que tengo es que en los menus que tengo, de alumnos y maestros, cuando elijo capturar o mostrar al terminar de hacer la funcion termina el programa.
Puse unas estructuras hacer-mientras para que siempre te regrese a algun menu y despues ya solo si lo desides, salir, mostrar datos, buscar datos, o salir del programa.
Por aho esta en codigo return; que segun encontre deberia regresarme al menu anterior, donde quiera que este la funcion, y no lo hace.

Ojala vean que es lo que le falta o le sobra y me digan para que funcione correctamente.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct profesor
{
       char nombre[50],codigo[10],carrera[40],materia1[20],materia2[20],materia3[20],materia4[20],materia5[20];
       int opcmp;
} profesores[20];

struct alumno
{
       char nombre[50],codigo[10],carrera[40];
       int edad, opcma, numdecap;     
       float promedio[5];
       char sexo[1];
} alumnos[100];


void menuprincipal(int *r)
{   
     int opcionmp;
     do{
        printf("1-Alumnos  2-Profesores  3-Salir del programa\n");
        scanf("%d",&opcionmp);
        system("CLS");
        if(opcionmp!=1&&opcionmp!=2&&opcionmp!=3)
           {printf("La opcion elegida es incorrecta\n");
           system("PAUSE");
           printf("'Presione cualquier tecla para continuar la ejecucion del programa'");
           system("CLS");}}
     while(opcionmp!=1&&opcionmp!=2&&opcionmp!=3);
     *r=opcionmp;
}

void menuinicio(int opcionmi)
{
     do{
        printf("1-Alumnos  2-Profesores  3-Salir del programa\n");
        scanf("%d",&opcionmi);
        system("CLS");
        if(opcionmi!=1&&opcionmi!=2&&opcionmi!=3)
           {printf("La opcion elegida es incorrecta\n");
           system("PAUSE");
           printf("'Presione cualquier tecla para continuar la ejecucion del programa'");
           system("CLS");}}
     while(opcionmi!=1&&opcionmi!=2&&opcionmi!=3);
}
     

void capturardatosA(int r)
{
     int i;
     for(i=0;i<r;i++){
                      printf("Introduce el nombre del alumno: ");
                      fflush(stdin);
                      gets(alumnos[i].nombre);
                      do{
                      printf("Introduce la edad: ");
                      scanf("%i",&alumnos[i].edad);
                      if(alumnos[i].edad<0){
                                            printf("La edad es incorrecta");
                                            system("PAUSE");
                                            }}
                      while(alumnos[i].edad<0);
                      printf("Introduce el sexo con las letras  M  o  F  : ");
                      fflush(stdin);
                      gets(alumnos[i].sexo);
                      printf("Escriba tal y como se encuentra en el menu la carrera del alumno:\ninformatica \ncomputacion \nindustrial \ncomunicaciones_y_electronica \ncivil \ningenieria_quimica \ncontaduria \nadministracion\n");
                      gets(alumnos[i].carrera);
                      printf("Introduce Su Codigo: ");
                      fflush(stdin);
                      gets(alumnos[i].codigo);
                      printf("Introduce Su Promedio: ");
                      scanf("%f", &alumnos[i].promedio);                       
                      printf("\n");
                      return;}
                     
}

void mostrardatosA(int r)
{
     int i;
     for(i=0;i<r;i++){
                         printf("%s\n", alumnos[i].nombre);
                         printf("Edad: %i\n", alumnos[i].edad);
                         printf("Sexo: %s\n", alumnos[i].sexo);                         
                         printf("Carrera: %s\n", alumnos[i].carrera);
                         printf("Codigo: %s\n", alumnos[i].codigo);
                         printf("Promedio: %f", alumnos[i].promedio);
                         printf("\n\n");
                         }
}

void mostrarbusquedasA(int r)
{
     printf("%s\n", alumnos[r].nombre);
     printf("Edad: %i\n", alumnos[r].edad);
     printf("Sexo: %s\n", alumnos[r].sexo);                         
     printf("Carrera: %s\n", alumnos[r].carrera);
     printf("Codigo: %s\n", alumnos[r].codigo);
     printf("Promedio: %f", alumnos[r].promedio);     
}     

void capturardatosP(int r)
{
     int i,l;
     for(i=0;i<r;i++){
                        printf("Introduce el nombre del profesor: ");
                        fflush(stdin);
                        gets(profesores[i].nombre);
                        printf("Escriba tal y como se encuentra en el menu la carrera del profesor:\ninformatica\ncomputacion\nindustrial\ncomunicaciones_y_electronica\ncivil\ningenieria_quimica\ncontaduria\nadministracion\n");
                        gets(profesores[i].carrera);
                        printf("\nIntroduce Su Codigo: ");
                        fflush(stdin);
                        gets(profesores[i].codigo); 
                        printf("¿Cuantas materias imparte? Como maximo 5. ");
                        scanf("%i", &l);
                        printf("Introduce el nombre de las materias:\n");
                        do{
                        switch(l){
                                  case 1:
                                       fflush(stdin);
                                       gets(profesores[i].materia1);
                                       break;
                                  case 2:
                                       fflush(stdin);
                                       gets(profesores[i].materia1);
                                       fflush(stdin);
                                       gets(profesores[i].materia2);
                                       break;
                                  case 3:
                                       fflush(stdin);
                                       gets(profesores[i].materia1);
                                       fflush(stdin);
                                       gets(profesores[i].materia2);
                                       fflush(stdin);
                                       gets(profesores[i].materia3);
                                       break;
                                  case 4:
                                       fflush(stdin);
                                       gets(profesores[i].materia1);
                                       fflush(stdin);
                                       gets(profesores[i].materia2);
                                       fflush(stdin);
                                       gets(profesores[i].materia3);
                                       fflush(stdin);
                                       gets(profesores[i].materia4);
                                       break;
                                  case 5:
                                       fflush(stdin);
                                       gets(profesores[i].materia1);
                                       fflush(stdin);
                                       gets(profesores[i].materia2);
                                       fflush(stdin);
                                       gets(profesores[i].materia3);
                                       fflush(stdin);
                                       gets(profesores[i].materia4);
                                       fflush(stdin);
                                       gets(profesores[i].materia5);
                                       break;
                                   default:
                                            printf("El numero de materias es incorrecto");}}
                        while(l!=1&&l!=2&&l!=3&&l!=4&&l!=5);                                       
}}

void mostrarbusquedasP(int r)
{
     printf("%s\n", profesores[r].nombre);
     printf("Carrera: %s\n", profesores[r].carrera);
     printf("Codigo: %s\n", profesores[r].codigo);
     printf("Sus clases son:\n");
     printf("%s",profesores[r].materia1);
     printf("%s",profesores[r].materia2);
     printf("%s",profesores[r].materia3);
     printf("%s",profesores[r].materia4);
     printf("%s",profesores[r].materia5);
}   

void mostrardatosP(int r)
{
     int i;
     printf("\n");
     for(i=0;i<r;i=i+1){
                         printf("%s\n", profesores[i].nombre);
                         printf("Carrera: %s\n", profesores[i].carrera);
                         printf("Codigo: %s\n", profesores[i].codigo);
                         printf("Imparte:\n");
                         printf("%s  ", profesores[i].materia1);
                         printf("%s  ", profesores[i].materia2);
                         printf("%s  ", profesores[i].materia3);
                         printf("%s  ", profesores[i].materia4);
                         printf("%s", profesores[i].materia5);
                         printf("\n\n");
                         }
}   

void busquedadealumnos()
{                   
                    int z,i;
                    char codigoz[10],materia[20],carrera[40];
                    printf("1-Buscar por codigo   2-Buscar por materia  3-Buscar por carrera");
                    scanf("%d",&z);
                    switch(z){
                    case 1:            fflush(stdin);
                                       printf("Introduce el codigo que quieres buscar:\n");
                                       gets(codigoz);
                                       for(i=0;i<20;i=i+1){
                                                           if(strcmp(codigoz,alumnos[i].codigo)==0)
                                                           mostrarbusquedasA(i);                                                                             
                                                           }
                                       break;
                    case 2:
                                       fflush(stdin);
                                       printf("Introduce la materia que quieres buscar:\n");
                                       gets(materia);
                                       for(i=0;i<20;i=i+1){
                                                           if(strcmp(materia,profesores[i].materia1)==0)
                                                           mostrarbusquedasA(i);
                                                           }
                                       for(i=0;i<20;i=i+1){
                                                           if(strcmp(materia,profesores[i].materia2)==0)
                                                           mostrarbusquedasA(i);
                                                           }
                                       for(i=0;i<20;i=i+1){
                                                           if(strcmp(materia,profesores[i].materia3)==0)
                                                           mostrarbusquedasA(i);
                                                           }
                                       for(i=0;i<20;i=i+1){
                                                           if(strcmp(materia,profesores[i].materia4)==0)
                                                           mostrarbusquedasA(i);
                                                           }               
                                       for(i=0;i<20;i=i+1){
                                                           if(strcmp(materia,profesores[i].materia5)==0)
                                                           mostrarbusquedasA(i);
                                                           }                             
                                       break;
                    case 3:            fflush(stdin);
                                       printf("Introduce la carrera que deseas buscar:\n");
                                       gets(carrera);
                                       for(i=0;i<100;i=i+1){
                                                           if(strcmp(carrera, alumnos[i].carrera)==0)
                                                           mostrarbusquedasA(i);                                                                             
                                                           }
                                       break;
                                  default:
                                          printf("Opcion Incorrecta \n"); }
}

void busquedademaestros()
{                   
                    int z,i;
                    char codigoz[10],materia[20],carrera[40];
                    printf("1-Buscar por codigo   2-Buscar por materia  3-Buscar por carrera");
                    scanf("%d",&z);
                    switch(z){
                    case 1:            fflush(stdin);
                                       printf("Introduce el codigo que quieres buscar:\n");
                                       gets(codigoz);
                                       for(i=0;i<20;i=i+1){
                                                           if(strcmp(codigoz,alumnos[i].codigo)==0)
                                                           mostrarbusquedasP(i);                                                                             
                                                           }
                                       break;
                    case 2:
                                       fflush(stdin);
                                       printf("Introduce la materia que quieres buscar:\n");
                                       gets(materia);
                                       for(i=0;i<20;i=i+1){
                                                           if(strcmp(materia,profesores[i].materia1)==0)
                                                           mostrarbusquedasP(i);
                                                           }
                                       for(i=0;i<20;i=i+1){
                                                           if(strcmp(materia,profesores[i].materia2)==0)
                                                           mostrarbusquedasP(i);
                                                           }
                                       for(i=0;i<20;i=i+1){
                                                           if(strcmp(materia,profesores[i].materia3)==0)
                                                           mostrarbusquedasP(i);
                                                           }
                                       for(i=0;i<20;i=i+1){
                                                           if(strcmp(materia,profesores[i].materia4)==0)
                                                           mostrarbusquedasP(i);
                                                           }               
                                       for(i=0;i<20;i=i+1){
                                                           if(strcmp(materia,profesores[i].materia5)==0)
                                                           mostrarbusquedasP(i);
                                                           }                             
                                       break;
                    case 3:            fflush(stdin);
                                       printf("Introduce la carrera que deseas buscar:\n");
                                       gets(carrera);
                                       for(i=0;i<100;i=i+1){
                                                           if(strcmp(carrera, alumnos[i].carrera)==0)
                                                           mostrarbusquedasA(i);                                                                             
                                                           }
                                       break;
                                  default:
                                          printf("Opcion incorrecta \n"); }
}

void menuprofesores()
{
     int x,y;
     do{
        printf("1-Capturar datos  2-Mostrar datos  3-Regresar al menu principal 4-Buscar por codigo, carrera o materia 5-Salir del programa\n");
        scanf("%d",&profesores[20].opcmp);
        if(profesores[20].opcmp!=1&&profesores[20].opcmp!=2&&profesores[20].opcmp!=3&&profesores[20].opcmp!=4&&profesores[20].opcmp!=5)
           {printf("La opcion elegida es incorrecta");
           system("PAUSE");
           printf("'Presione cualquier tecla para continuar la ejecucion del programa'");
           system("CLS");}}
     while(profesores[20].opcmp!=1&&profesores[20].opcmp!=2&&profesores[20].opcmp!=3&&profesores[20].opcmp!=4&&profesores[20].opcmp!=5);
     switch (profesores[20].opcmp){
            case 1: {printf("¿Cuantos profesores desea capturar?");
                 scanf("%d",&x);
                 capturardatosP(x);
                 break;}
            case 2: {printf("¿Cuantos profesores desea mostrar?");
                 scanf("%d",&y);
                 mostrardatosP(y);
                 break;}
            case 3: return;
            case 4: busquedademaestros();
            case 5: printf("Hasta luego y gracias por el 100 ;)\n\n");
}}     

void menualumnos()
{
     int x,y;
     do{
     do{
        printf("1-Capturar datos \n2-Mostrar datos \n3-Buscar por codigo, materia o carrera \n4-Regresar al menu principal \n5-Salir del programa\n");
        scanf("\n%d",&alumnos[100].opcma);
        system("CLS");
        if(alumnos[100].opcma!=1&&alumnos[100].opcma!=2&&alumnos[100].opcma!=3&&alumnos[100].opcma!=4&&alumnos[100].opcma!=5)
           {printf("La opcion elegida es incorrecta");
           system("PAUSE");
           printf("'Presione cualquier tecla para continuar la ejecucion del programa'");
           system("CLS");}}
     while(alumnos[100].opcma!=1&&alumnos[100].opcma!=2&&alumnos[100].opcma!=3&&alumnos[100].opcma!=4&&alumnos[100].opcma!=5);
     switch (alumnos[100].opcma){
            case 1: {printf("¿Cuantos alumnos desea capturar?");
                 scanf("%d",&x);
                 capturardatosA(x);
                 break;}
            case 2: {printf("¿Cuantos alumnos desea mostrar?");
                 scanf("%d",&y);
                 mostrardatosA(y);
                 break;}
            case 3: {busquedadealumnos();
                    break;}
            case 4: return;
                 break;
            case 5: printf("Hasta luego y gracias por el 100 ;)\n\n");
                 break;
                 }}
     while(alumnos[100].opcma!=1&&alumnos[100].opcma!=2&&alumnos[100].opcma!=3&&alumnos[100].opcma!=4&&alumnos[100].opcma!=5);
;}


int main(int argc, char *argv[])
{
    int x;
    menuprincipal(&x);
    switch(x){
          case 1: menualumnos();
                  break;
          case 2: menuprofesores();
                  break;
          default: printf("Hasta luego y gracias por el 100 ;)\n\n");
                   break;}
 
  system("PAUSE");
  return 0;
}

@synthesize



do-while

¡Buenas!

He visto que en la cadena de control de printf, en las primeras funciones, estas utilizando el caracter comilla simple ' de forma literal. Tienes que ponerlo en una secuencia de escape: \'

Otra cosa (tampoco he mirado mucho el resto de las funciones), es que en main llamas una sola vez a menuprincipal, por lo tanto, devuelva lo que devuelva esta funcion, solo ejjecutara el switch una sola vez y luego finalizara el programa.

En menuinicio (creo) no estas devolviendo ningun valor: La funcion tiene tipo de retorno void, y el parametro que recive lo estas pasando por valor, por lo tanto no lo estas modificando, y al retornar de la funcion, la variable que has utilizado para llamar a la funcion conservara el valor que tenia antes de la llamada.

No he mirado mas codigo, pero revisalo, porque es posible que se te hayan pasado por alto detalles de este estilo.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!