Autor
|
Tema: Funciones, selectivas y repetitivas. (tiene un error al ejecutarse, ayuda!) (Leído 3,106 veces)
|
jravelar
Desconectado
Mensajes: 12
|
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"); if(opcionmp!=1&&opcionmp!=2&&opcionmp!=3) {printf("La opcion elegida es incorrecta\n"); printf("'Presione cualquier tecla para continuar la ejecucion del programa'"); while(opcionmp!=1&&opcionmp!=2&&opcionmp!=3); *r=opcionmp; } void menuinicio(int opcionmi) { do{ printf("1-Alumnos 2-Profesores 3-Salir del programa\n"); if(opcionmi!=1&&opcionmi!=2&&opcionmi!=3) {printf("La opcion elegida es incorrecta\n"); printf("'Presione cualquier tecla para continuar la ejecucion del programa'"); 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: "); do{ printf("Introduce la edad: "); scanf("%i",&alumnos [i ]. edad); if(alumnos[i].edad<0){ printf("La edad es incorrecta"); }} while(alumnos[i].edad<0); printf("Introduce el sexo con las letras M o F : "); 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: "); printf("Introduce Su Promedio: "); scanf("%f", &alumnos [i ]. promedio); 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); } } 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: "); 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: "); gets(profesores [i ]. codigo); printf("¿Cuantas materias imparte? Como maximo 5. "); printf("Introduce el nombre de las materias:\n"); do{ switch(l){ case 1: gets(profesores [i ]. materia1); break; case 2: gets(profesores [i ]. materia1); gets(profesores [i ]. materia2); break; case 3: gets(profesores [i ]. materia1); gets(profesores [i ]. materia2); gets(profesores [i ]. materia3); break; case 4: gets(profesores [i ]. materia1); gets(profesores [i ]. materia2); gets(profesores [i ]. materia3); gets(profesores [i ]. materia4); break; case 5: gets(profesores [i ]. materia1); gets(profesores [i ]. materia2); gets(profesores [i ]. materia3); gets(profesores [i ]. materia4); 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("%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; 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("%s ", profesores [i ]. materia1); printf("%s ", profesores [i ]. materia2); printf("%s ", profesores [i ]. materia3); printf("%s ", profesores [i ]. materia4); printf("%s", profesores [i ]. materia5); } } 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"); switch(z){ printf("Introduce el codigo que quieres buscar:\n"); for(i=0;i<20;i=i+1){ if(strcmp(codigoz ,alumnos [i ]. codigo)==0) mostrarbusquedasA(i); } break; case 2: printf("Introduce la materia que quieres buscar:\n"); 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; printf("Introduce la carrera que deseas buscar:\n"); 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"); switch(z){ printf("Introduce el codigo que quieres buscar:\n"); for(i=0;i<20;i=i+1){ if(strcmp(codigoz ,alumnos [i ]. codigo)==0) mostrarbusquedasP(i); } break; case 2: printf("Introduce la materia que quieres buscar:\n"); 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; printf("Introduce la carrera que deseas buscar:\n"); 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"); printf("'Presione cualquier tecla para continuar la ejecucion del programa'"); 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?"); capturardatosP(x); break;} case 2: {printf("¿Cuantos profesores desea mostrar?"); 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); 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"); printf("'Presione cualquier tecla para continuar la ejecucion del programa'"); 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?"); capturardatosA(x); break;} case 2: {printf("¿Cuantos alumnos desea mostrar?"); 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;} return 0; }
|
|
|
En línea
|
|
|
|
@synthesize
Wiki
Desconectado
Mensajes: 640
Another Brick in the Wall
|
return no se usa par regresar, si no para devolver valores.
|
|
|
En línea
|
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡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!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Error en cabecera de funciones?
« 1 2 »
Programación C/C++
|
Constantinoplero
|
12
|
5,289
|
19 Diciembre 2011, 00:53 am
por bdoX
|
|
|
ERROR ARREGLOS, FUNCIONES Y Makefile.win
Programación C/C++
|
alfo1294
|
1
|
2,274
|
27 Julio 2012, 05:21 am
por avesudra
|
|
|
[AYUDA] Ints Win 8 error: El disco seleccionado tiene el estilo de particion GPT
« 1 2 »
Windows
|
Graphixx
|
12
|
7,107
|
29 Junio 2014, 03:23 am
por Gh057
|
|
|
AYUDA! problema con programas usando Estructuras de control selectivas
Programación C/C++
|
Ingrid1997
|
2
|
2,360
|
11 Octubre 2015, 11:07 am
por Seyro97
|
|
|
En vez de ejecutarse mi web en htdocs, me descarga los archivos php. Necesito ayuda
Desarrollo Web
|
emperie
|
3
|
4,210
|
18 Enero 2022, 14:26 pm
por .xAk.
|
|