C/Visual C - BORRAR EL CONTACTO DE UNA AGENDA EN C

 
Vista:

BORRAR EL CONTACTO DE UNA AGENDA EN C

Publicado por kuku (6 intervenciones) el 06/03/2007 23:05:33
Hola.
Tengo q borrar contactos de una agenda en C y he proba a hacerlo de 2 formas y de ninguna me funciona.

Aqui las dejo para q veais:

1ª Opción

printf ("Introduzca el nombre que desea borrar:");
fflush(stdin);
scanf("%s",&nom);
for (i=0;i<cont;i++)
{
compar=strcmp(nom,contactos[i].nombre);

if(compar=0);
{
pos=i;
fflush(stdin);
printf("Nombre:%s\n",contactos[i].nombre);
printf("Apellido primero:%s\n",contactos[i].apellido1);
printf("Apellido segundo:%s\n",contactos[i].apellido2);
printf("Edad:%s\n",contactos[i].edad);
printf("Telefono:%s\n",contactos[i].telefono);
printf("Movil:%s\n",contactos[i].movil);
fflush(stdin);
printf("E-mail:%s\n",contactos[i].mail);
printf("Fecha de nacimiento:%s\n",contactos[i].nacimiento);
fflush(stdin);
}
}
printf("\n");
printf("Esta seguro que desea borrar este contacto? [S/N]:");
scanf("%c",&respuesta);
cont--;

if(respuesta='s')
{
for(i=pos;i<cont;i++)
{
contactos[i]=contactos[i+1];
}
}
else
printf ("\nHa decidido no borrarlo");


getch();

break;

2ª Opcion

printf("Introduce el nombre del contacto a borrar: ");
scanf("%s",vector);
for(x=0; x<max; x++)
{
if (strcmp (vector,datos[x].nombre)==0)
{
datos[x]=datos[x+1];
for (j=x; j<cont; j++)
{
datos[j]=datos[j+1];
}
j--;
cont --;
}
}

Bueno espero ayuda diciendome donde esta el fallo y corregirmelo o hacerme otra posible solucion para borrarlo.
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:BORRAR EL CONTACTO DE UNA AGENDA EN C

Publicado por Nelek (816 intervenciones) el 07/03/2007 07:40:22
Hola, como no lo has puesto supongo que tu variable "nom" es de tipo char [ ], por lo que no tengo muy claro que el scanf ("%s", &nom). Hace mucho que no programo en C pero prueba a ver con el getchar o el gets. Puede que sea por ahi el fallo.

Te recomiendo que pongas printf intermedios para comprobar que los datos estan siendo los que tocan y ver que todo esta haciendo lo que tu quieres que haga.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:BORRAR EL CONTACTO DE UNA AGENDA EN C

Publicado por kuku (6 intervenciones) el 07/03/2007 19:44:14
Hola, tambien probe con el gets, pero nada no me funciona.

La 2ª opcion seria asi, no como la de arriba :

printf("Introduce el nombre del contacto a borrar: ");
scanf("%s",nom);
for(x=0; x<MAX; x++)
{
if (strcmp (nom,contactos[x].contactos)==0)
{
contactos[x]=contactos[x+1];
for (i=x; i<cont; i++)
{
contactos[i]=contactos[i+1];
}
i--;
cont --;
}
}

SI ALGUIEN TIENE UNA FORMA DE BORRAR Q LE FUNCIONE, POR FAVOR Q LO PONGA.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:BORRAR EL CONTACTO DE UNA AGENDA EN C

Publicado por kuku (6 intervenciones) el 07/03/2007 19:44:19
Hola, tambien probe con el gets, pero nada no me funciona.

La 2ª opcion seria asi, no como la de arriba :

printf("Introduce el nombre del contacto a borrar: ");
scanf("%s",nom);
for(x=0; x<MAX; x++)
{
if (strcmp (nom,contactos[x].contactos)==0)
{
contactos[x]=contactos[x+1];
for (i=x; i<cont; i++)
{
contactos[i]=contactos[i+1];
}
i--;
cont --;
}
}

SI ALGUIEN TIENE UNA FORMA DE BORRAR, Q LE FUNCIONE, POR FAVOR Q LO PONGA.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:BORRAR EL CONTACTO DE UNA AGENDA EN C

Publicado por Nelek (816 intervenciones) el 08/03/2007 07:53:59
Mmmm, en el foro hay mensajes de como hacer algo parecido a las CList del MFC pero en C, echa un vistazo.

Otra opcion, pero con algo mas de faena seria el usar un vector adicional. Me explico

Agenda[MAX];
Temp[MAX];

int cuenta = 0, tempcont = 0;

printf("Introduce el nombre del contacto a borrar: ");
scanf("%s",nom);
for(cuenta =0; cuenta < MAX; cuenta++)
{
if ( (strcmp (nom,contactos[x].contactos) ) != 0 )
{
tempcont++;
Temp[tempcont] = Agenda [cuenta];
}
}

for (cuenta = 0; cuenta < MAX; cuenta++)
Agenda [cuenta] = Temp[cuenta]

teoricamente lo que hago es: lo mismo que lo tuyo, pero en lugar de buscar el sitio donde coincide el nombre, busco lo contrario, donde hay diferencias (que se suponen todos menos 1). Si no hay coincidencia, se incrementa el contador del temporal y se guarda el contacto que no coincide en el. Cuando hay coincidencia... no se hace nada. Al acabar de recorrer la agenda, sobreescribimos la agenda con el temporal.

No es limpio, no es lo mas optimizado... pero creo que funcionara.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:BORRAR EL CONTACTO DE UNA AGENDA EN C

Publicado por kuku (6 intervenciones) el 20/03/2007 01:18:16
Muchas gracias por la ayuda Nelek.

Saludillos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar