Tengo un programa en C y C++ como proyecto para la escuela y me está dando algunos problemas.

Mi muy estimado <Nedrosed> quisiera que me pudieras ayudar en este programita... Es que es un proyekto de la escuela, pero me ha causado problemitas... No se ha que se deba... Sin embargo se que no resuelves problemas pero... Te lo agradecería mucho si me pudieras ayudar...
Este programa da la posibilidad de dar entrada a ciertos datos de unos alumnos... Y después puedes buscarlos por numero de matricula y apellido pero el problema es que... Cuando doy entrada a los datos... Me los guarda bien pero al querer buscarlos (si tengo más de 2 datos registrados) generalmente me dice que el 1ero que registré no se encuentra... Y creo que el problema es que... No me guarda bien los datos puesto que no me encuentra al 1er dato que di entrada... Aquí te mando el programa:
#include"stdio.h"
#include"conio.h"
#define N 20
#include"string.h"
char lista [N][4][30];
char resp;
char m[30];
void leer(int);
void buscar(char*,int,int);
void main()
{
int opcion, n=0;
while(1)
{
do
{
clrscr();
printf("\n\t1.Entrada de datos alumnos\n");
printf("\n\t2.B£squeda por No. De matr¡cula\n");
printf("\n\t3.B£squeda por apellidos\n");
printf("\n\t4.Salir\n");
printf("\n\tTeclee la opcion deseada\n");
scanf("%d%*c",&opcion);
}
while(opcion<1 || opcion >4);
if(opcion!=4)
{
switch (opcion)
{
case 1:
resp='s';
while(resp=='s' || resp=='S')
{
leer(n++);
}
break;
case 2:
clrscr();
printf("N£mero de matr¡cula..... ");
gets(m);
buscar(m,0,n);
break;
case 3:
clrscr();
printf("Apellidos..........");gets(m);
buscar(m,1,n);
break;
}
}
else
break;
}
}
void leer(int n)
{
do
{
do
{
clrscr();
printf("Alumno n£mero %d\n\n",n+1);
printf("N£mero de matricula....... ");
gets(lista[n][0]);
printf("Apellidos...... ");
gets(lista[n][1]);
printf("Nombre......... ");
gets(lista[n][2]);
printf("Direccion...... ");
gets(lista[n][3]);
printf("\n\n Datos correctos?? S/n...... ");
resp=getche();
}
while(resp=='n'|| resp=='N');
printf("\n\n OTRO?? S/n...... ");
resp=getche();
}
while(resp=='s'|| resp=='S');
}
#define NO 0
#define SI 1
void buscar(char x[30],int col,int alumnos)
{
int existe=NO, i=0,comp;
while(!existe && i<alumnos)
comp= strcmp(lista[i++][col],x);
if (comp==0)
existe=SI;
if(existe)
printf("\nNo. Matr¡cula... %s\nNombre... %s\nApellidos... %s\nDirecci¢n... %s\n",lista[i-1][0],lista[i-1][1],lista[i-1][2],lista[i-1][3]);
else
printf("\n%s No existe",x);
printf("\n\nPulse una tecla para continuar");
resp=getch();
}

1 Respuesta

Respuesta
1
Tienes un problema en el bucle de la función buscar.
*** TU CÓDIGO ***
while(!existe && i < alumnos)
comp = strcmp(lista[i++][col], x);
if (comp == 0)
existe = SI;
****************
Hasta que no recorre toda la lista no comprueba el valor de comp.
*** CORRECCIÓN ***
while(!existe && i < alumnos)
{
comp= strcmp(lista[i++][col], x);
if (comp == 0)
existe = SI;
}
*****************
Otro problema que he observado ocurre cuando continuas introduciendo alumnos sin volver al menú principal. El contador lo incrementas cuando llamas a la función leer pero no cuando estás dentro.
Intenta corregirlo y si sigues teniendo problemas aquí estoy.
1000 gracias, tu ayuda me ha servido muchísimo, he dado por terminada esta pregunta pero, si tengo otra duda me gustaría hacértela llegar, ah y sabes he seguido tus respuestas anteriores y la verdad me encantaría ser tu amiga... claro si así lo quieres, en fin, solo quiero manifestarte mi admiración... y te dejaría mi mail pero no quiero ponerlo aquí así que si así lo deseas te lo puedo dar en privado, nuevamente... MUCHAS GRACIAS, ERES UN EXCELENTE EXPERTO!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas