Hola, buenas noches, tengo un proyecto escolar para mañana y ya lo hice, pero me falta un detalle, espero que usted me pueda ayudar Lo que pasa, es que cuando mando a imprimir una parte de la estructura me manda puros caracteres bien raros, y no se que me falla ya le he buscado por todas partes esta es en la función que imprime basura: void consultas() {char nk5[8]; limpiarpantalla();
gotoxy(35,3); printf("CONSULTAS"); gotoxy(5,6); checalibres(); if (maxal == 0) { gotoxy(5,8); printf("No hay ningun alumno inscrito hasta el momento"); gotoxy(5,9); printf("Presiona una tecla para dar de alta a los alumnos..."); getch(); altas(); } else do { limpiarpantalla(); gotoxy(35,3); printf("CONSULTAS"); gotoxy(5,6); ban = 0; gotoxy(5,8); printf("Escribe el numero de control que vas a buscar "); fflush(stdin); gets(nk5); for (i=0;i<maxal;i++){ if ((strcmp(al.nc,nk5))==0) { limpiarpantalla(); gotoxy(35,3); printf("CONSULTAS"); gotoxy(5,8); printf("Numero de Control: ");puts(al.nc); gotoxy(5,9); printf("Nombre : ");puts(al.n); gotoxy(5,10); printf("Domicilio : "); puts(al.d); gotoxy(5,11); printf("Telefono : ");puts(al.t); gotoxy(5,12); printf("Especialidad : "); puts(al.e); ban = 1;} } if (ban==0) { gotoxy(5,9); printf("El numero de control no existe"); getch(); } } while (ban == 0); getch(); } Si necesitas todo el código por favor dime para ponerlo aquí, GRACIAS DE ANTEMANO, Y ESPERO UNA PRONTO RESPUESTA
1 Respuesta
Respuesta de pedroyo
1
1
pedroyo, Si desea ponerse en contacto conmigo por cualquier motivo,...
Pues mira, he estado mirando tu código, y es un poco complicado de entender, por favor, pon nombres de variables más descriptivas. En cuanto a lo de escribir cosas raras, lo único que se me ocurre es que algún campo de la estructura global "al" no este inicializado, yo creo que deberías de revisar eso, y ya puestos también mira la variable "maxal", a ver si se actualiza bien.
#include<stdio.h> #include<conio.h> #include<string.h> int maxal,i,x,y,ban; typedef struct { char nc[8]; char n[50]; char d[60]; char t[15]; char e[10]; int v; }alumno; alumno al[10]; void limpiarvar() { strcpy(al.nc," "); strcpy(al.n," "); strcpy(al.d," "); strcpy(al.t," "); strcpy(al.e," "); } void inicializar() { for (i=0;i<10;i++) al.v=0; } void limpiarpantalla() { for (i=5;i<50;i++) { gotoxy(5,i); printf(" "); } gotoxy(5,3); printf(" "); } void pantalla() {textbackground(BLUE); clrscr(); textcolor(WHITE); clrscr(); printf(" #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#\n"); printf(" º º\n"); printf(" º º\n"); printf(" º _____________________ º\n"); for (i=5;i<50;i++) { gotoxy(1,i); printf(" º º"); } printf(" #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#"); } void checalibres() { maxal = 0; for (i=0;i<10;i++) if (al.v==1) maxal = maxal + 1; } void altas() {int na, pos; limpiarpantalla(); gotoxy(38,3); printf("ALTAS"); checalibres(); do { gotoxy(38,3); printf("ALTAS"); gotoxy(5,6); printf("¨Cual es el numero de alumnos que vas a dar de alta? "); fflush(stdin); scanf("%d",&na); if (10-maxal < na) {gotoxy(5,7); printf("Tienes que dar de baja a algunos alumnos, ya que solo quedan %d espacios ",10-maxal); getch(); limpiarpantalla(); gotoxy(38,3); printf("ALTAS"); } } while (na > 10-maxal); pos = maxal; limpiarpantalla(); gotoxy(38,3); printf("ALTAS"); x=15; y=9; for (i=pos;i<pos+na;i++) { al.v = 1; gotoxy(x,y); puts("Numero de Control : "); gotoxy(x+20,y); fflush(stdin);gets(al.nc); y++; gotoxy(x,y); puts("Nombre : "); gotoxy(x+9,y); fflush(stdin);gets(al.n); y++; gotoxy(x,y); puts("Domicilio : "); gotoxy(x+12,y); fflush(stdin);gets(al.d); y++; gotoxy(x,y); puts("Telefono : "); gotoxy(x+11,y); fflush(stdin);gets(al.t); y++; gotoxy(x,y); puts("Especialidad : "); gotoxy(x+15,y); fflush(stdin);gets(al.e); y++; y++; if (i==3) { x=40; y=9; } } } void bajas() {char nk10[8]; int pz,may; limpiarpantalla(); gotoxy(38,3); printf("BAJAS"); gotoxy(5,6); checalibres(); if (maxal == 0) { gotoxy(5,8); printf("No hay ningun alumno inscrito hasta el momento "); gotoxy(5,9); printf("Presiona una tecla para dar de alta a los alumnos... "); getch(); altas(); } else do { limpiarpantalla(); gotoxy(38,3); printf("BAJAS"); ban = 0; gotoxy(5,8); printf("Escribe el numero de control que vas a dar de baja "); fflush(stdin); gets(nk10); for (i=0;i<10;i++) if (strcmp(al.nc,nk10)==0) { pz = i; ban = 1;} may = maxal -1; if (ban==0) { gotoxy(5,9); printf("El numero de control no existe"); getch(); } } while (ban == 0); if (may == 0) { strcpy(al[may].nc," "); strcpy(al[may].n," "); strcpy(al[may].d," "); strcpy(al[may].t," "); strcpy(al[may].e," "); al[may].v = 0; } else { strcpy(al[pz].nc,al[may].nc); strcpy(al[pz].n,al[may].n); strcpy(al[pz].d,al[may].d); strcpy(al[pz].t,al[may].t); strcpy(al[pz].e,al[may].e); al[may].v = 0; strcpy(al[may].nc," "); strcpy(al[may].n," "); strcpy(al[may].d," "); strcpy(al[may].t," "); strcpy(al[may].e," "); } getch(); } void consultas() {char nk5[8]; limpiarpantalla(); gotoxy(35,3); printf("CONSULTAS"); gotoxy(5,6); checalibres(); if (maxal == 0) { gotoxy(5,8); printf("No hay ningun alumno inscrito hasta el momento"); gotoxy(5,9); printf("Presiona una tecla para dar de alta a los alumnos..."); getch(); altas(); } else do { limpiarpantalla(); gotoxy(35,3); printf("CONSULTAS"); gotoxy(5,6); ban = 0; gotoxy(5,8); printf("Escribe el numero de control que vas a buscar "); fflush(stdin); gets(nk5); for (i=0;i<maxal;i++){ if ((strcmp(al.nc,nk5))==0) { limpiarpantalla(); gotoxy(35,3); printf("CONSULTAS"); gotoxy(5,8); printf("Numero de Control: ");puts(al.nc); gotoxy(5,9); printf("Nombre : ");puts(al.n); gotoxy(5,10); printf("Domicilio : "); puts(al.d); gotoxy(5,11); printf("Telefono : ");puts(al.t); gotoxy(5,12); printf("Especialidad : "); puts(al.e); ban = 1;} } if (ban==0) { gotoxy(5,9); printf("El numero de control no existe"); getch(); } } while (ban == 0); getch(); } void modificaciones() {char nk2[8]; limpiarpantalla(); gotoxy(30,3); printf("MODIFICACIONES"); checalibres(); if (maxal == 0) { gotoxy(5,8); printf("No hay ningun alumno inscrito hasta el momento"); gotoxy(5,9); printf("Presiona una tecla para dar de alta a los alumnos..."); getch(); altas(); } else do { limpiarpantalla(); gotoxy(30,3); printf("MODIFICACIONES"); ban = 0; gotoxy(5,8); printf("Escribe el numero de control que vas a Modificar "); fflush(stdin); gets(nk2); for (i=0;i<10;i++) if (strcmp(al.nc,nk2)==0) { limpiarpantalla(); limpiarvar(); gotoxy(30,3); printf("MODIFICACIONES"); gotoxy(5,8); printf("Numero de Control: "); fflush(stdin); gets(al.nc); gotoxy(5,9); printf("Nombre : "); fflush(stdin);gets(al.n); gotoxy(5,10); printf("Domicilio : "); fflush(stdin);gets(al.d); gotoxy(5,11); printf("Telefono : "); fflush(stdin);gets(al.t); gotoxy(5,12); printf("Especialidad : "); fflush(stdin);gets(al.e); ban = 1;} if (ban==0) { gotoxy(5,9); printf("El numero de control no existe"); getch(); } } while (ban == 0); getch(); } void listado() { limpiarpantalla(); gotoxy(36,3); printf("LISTADO"); x=15; y=9; for (i=0;i<10;i++) if (al.v==1) { gotoxy(x,y); printf("Numero de control : "); puts(al.nc); y++; gotoxy(x,y); printf("Nombre : "); puts(al.n); y++; gotoxy(x,y); printf("Domicilio : ");puts(al.d); y++; gotoxy(x,y); printf("Telefono : ");puts(al.t); y++; gotoxy(x,y); printf("Especialidad : "); puts(al.e); y++; y++; if (i==3) { x=40; y=9; } } getch(); } void menu() {{int op; do { limpiarpantalla(); gotoxy(39,3); printf("MENU"); gotoxy(35,8); printf("1.- Altas"); gotoxy(35,9); printf("2.- Bajas"); gotoxy(35,10); printf("3.- Consultas"); gotoxy(35,11); printf("4.- Modificaciones"); gotoxy(35,12); printf("5.- Listado"); gotoxy(35,13); printf("6.- Salir"); gotoxy(35,15); printf("Selecciona Tu Opcion "); fflush(stdin); scanf("%d",&op); switch (op){ case 1:altas(); break; case 2:bajas(); break; case 3:consultas();break; case 4:modificaciones();break; case 5:listado();break; } } while (op!=6); getch(); }} main() { inicializar(); pantalla(); for (i=0;i<10;i++) limpiarvar(); menu(); } Es que, este el código completo, y pues maxal si se actualiza bien, y al si esta incializado como estructura, lo que tiene que hacer el programa, es dar de alta a alumnos, darlos de baja, y modificar datos, listado de datos, y me compila bien, pero me sale basura solo en la función consultas, ya que en listado si aparece bien
A ver, la función limpiarvar, no tiene la i inicializada, aunque acabo de darme cuenta que llamas a esta función desde un for. NO hagas esto, si necesitas hacer un for, hazlo en la función, y si necesitas una variable más pues la metes, pero de esta forma complicas la depuración y por tanto encontrar los errores. Te sugiero que quites las variables globales, y declaras el vector de alumnos en main y se lo pasas a las funciones, de esta forma las funciones quedan más independientes y claras. Lo único que se me ocurre es que metas printf por todas partes, ver si se inicializa bien, valores de las variables, te sugiero el "ddd". Y te repito, variables descriptivas, tan fácil como coger tu programa y hacer un "find/replace".