PDA

Ver la versión completa : Duda con arreglo



krizalid
29-06-2011, 04:56
Hola tengo una duda con un arreglo, el problema es este tengo determinada estructura y un arreglo. tengo que llenar el arreglo segun los datos que desee.
pero el problema es que no se como hacer para ingresarle otro dato al arreglo sin sobreescribir los demas osea que tengo que saber si al ingresar el dato en la posicion la posicion este vacia. aparte tengo que poder eliminar un dato del arreglo. porfavor necesito su ayuda.
Es en dev c++


void creaciondeclientes()
{
printf("creacion de cuenta, ingrese los siguientes datos\n\n");
int cantidancuentas=0;
for(int i=0; i <=5; i++)
{
printf("Nombre Cliente: ");
scanf("%s", &cuentah[i].nombre);
printf("\nApellido Cliente: ");
scanf("%s", &cuentah[i].apellido);
printf("\nfecha de nacimiento: ");
scanf("%s", cuentah[i].fechanacimiento);
printf("\nDireccion del Cliente: ");
gets(cuentah[i].direccion);
gets(cuentah[i].direccion);
printf("\ncorreo electronico del cliente: ");
scanf("%s", &cuentah[i].correo);
printf("\nGenero del Cliente: ");
scanf("%s", &cuentah[i].genero);
printf("\ncodigo personal de la cuenta: ");
scanf("%s", &cuentah[i].numerodcuenta);
printf("\nestado de la cuenta -activa- -cuenta no activa- : ");
scanf("%s", &cuentah[i].estado);
printf("\nsaldo inicial de la cuenta: ");
scanf("%f", &cuentah[i].saldo);

if (cuentah[i].saldo > 0)
{
system("cls");
printf("\n\ncuenta creada correctamente\n");
system("pause");
system("cls");
cantidancuentas ++;
cuentah[i].codigo = cantidancuentas;
}

else
{
system("cls");
printf("\nla cuenta no puede crearse con un saldo igual o menor a 0");
i--;
}

}
system("pause");
system("cls");
}

Aqui pido los datos pero no se como hacer el resto como podria resolverlo.:confused:

Marchi
02-07-2011, 18:23
Primero que nada unos detalles de tu código:

No se recomienda el uso de gets() por que no hace ningún control sobre el tamaño de la entrada, lo mismo pasa con scanf en la forma en que está utilizado.
Cuando el miembro de una estructura es un arreglo, este es un puntero, es decir, no es necesario aplicar el operador de referencia para pasárselo a scanf().


En cuanto a tus preguntas, para saber si un elemento está borrado o no, o bien utilizás un nuevo miembro en la estructura a modo de flag de borrado , o podés verificar si hay datos o no en los distintos miembros de la estructura.

Para el borrado, lo mas simple es usar un único memset:
memset(cuentah[i],0,sizeof(*cuentah));
o un memset por cada miembro:

memset(cuentah[i].nombre,0,sizeof(cuentah->nombre));
memset(cuentah[i].apellido,0,sizeof(cuentah->apellido));
.
.
.
o

*cuentah[i].nombre = 0;
*cuentah[i].apellido = 0;
.
.
.

En realidad hay otras opciones, pero con eso debería bastarte para hacer pruebas, claro está que depende de que opción elijas para considerarlos vacíos o no a los elementos del arreglo.


Saludos