Duda en cadenas de caracteres

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
Respuesta
1
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".

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas