• Domingo 15 de Diciembre de 2024, 11:03

Autor Tema:  Re: ¿Dónde está el error en esta función?  (Leído 1323 veces)

JuanMi

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: ¿Dónde está el error en esta función?
« en: Viernes 13 de Junio de 2003, 22:35 »
0
Esta función implementa el borrado de personas en una hipotética agenda.
Nunca aparace la primera persona, con lo que borra la que no es. ¿Donde está
el error?
Gracias anticipadas.


****************************************************************************
*
*                          FUNCION BORRAR
*
****************************************************************************
****
*/

int borrar (int*r)
{
   int i,del;
   int opcion;
   int mayuscula;

   *r=cuenta_personas;

   if (*r==0)
   {
    clrscr();
    gotoxy(28,12);
  cprintf("LA AGENDA ESTA VACIA");
      getch();
    return 1;
   }
   clrscr();
   gotoxy(14,12);
 cprintf("INTRODUCIR EL NUMERO DE PERSONA QUE DESEAS BORRAR : ");
   textcolor(RED);
   textbackground(WHITE);
   scanf("%d",&del);

     for(i=del;i<*r;i++)
     {

            cprintf("nn                            255255255 A T E N C
I O N !!!                             ");
            textcolor(30);
            textbackground(BLACK);
          cprintf("nr       Se va a borrar la persona con indice %d: 256
%s %s %s 257
",i,datos[i-1].nombre,datos[i-1].primer_apellido,datos[i-1].segundo_apellido
);
            gotoxy(19,18);
            textcolor(WHITE);
            textbackground(BLACK);
            cprintf("n250Est240 seguro de querer continuar? (S/N): ");
      do
      {
               opcion=getchar();
         mayuscula=toupper(opcion);
         if (mayuscula=='S')
         {
          strcpy(datos.nombre,datos[i+1].nombre);
         strcpy(datos.primer_apellido,datos[i+1].primer_apellido);
         strcpy(datos.segundo_apellido,datos[i+1].segundo_apellido);
         strcpy(datos.direccion,datos[i+1].direccion);
         strcpy(datos.telefono,datos[i+1].telefono);
         strcpy(datos.movil,datos[i+1].movil);
                  *r=*r-1;
                  cuenta_personas=cuenta_personas-1;
                  gotoxy(20,19);
                  textbackground(GREEN);
                  cprintf("nSe ha borrado la persona con indice %d",i);
                  gotoxy(1,25);

        cprintf("250Deseas actualizar el archivo de disco? (S/N): ");
        do
        {
         opcion=toupper(getch());
          }
        while((opcion!='S')&&(opcion!='N'));
        putchar(opcion);
        if (opcion=='S')
         backup();
        gotoxy(1,25);
        textcolor(WHITE);
                  delline();
                  gotoxy(1,25);
        cprintf("Por favor, pulse una tecla para continuar ...");
                  getch();

        return 0;
       }
               else
             {
          if (mayuscula=='N')
            {
             return 0;
            }
       }
          }
            while ((mayuscula!='S')&&(mayuscula!='N'));
         }

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
¿Dónde está el error en esta función?
« Respuesta #1 en: Jueves 16 de Octubre de 2003, 16:48 »
0
Hola:

Tu error a simple vista está en el for.....lo que pasa es que tu preguntas, cuantas personas quieres borrar, y ese valor lo asignas a la variable "del".....hasta ahí no hay problema.....pero cuando llamas a tu for......haces que el "i" sea igual a "del", entonces, si yo quiero borrar 3 personas, entonces, vas a borrar en tu arreglo o matriz, a partir del indice 3....que vendría a ser en realidad el 4, ya que los arreglos comienzan de 0.

Para corregir el error, tendrías que declarar tu for así:

for(i=0;i<del;i++)

Suerte,