Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Issacar

Alterar um dado cadastrado no c utilizando manipulação de arquvos

Recommended Posts

Fala Pessoal. estou com um problema, pois faz pouco que começei a programar em c e não estou conseguindo fazer um alterar cadastro, ele altera mas não sobrescreve, apenas escreve outro alterando, preciso de uma mãozinha do pessoal :D

 

void editarcadastro(){ // FAZER

FILE *arq_cliente;
clientes cli_registrado;
clientes cli_altera;
int i, c;
rewind(arq_cliente);
system("cls");

printf("-- Editar Cadastro--\n");
printf("Digite o numero do registro\n");
scanf("%d",&i);
i=i-1;
if (arq_cliente = fopen ("controle.cdi", "a+b")){
fseek(arq_cliente,i*sizeof(clientes),SEEK_CUR);
if(fread(&cli_registrado,sizeof(clientes),1,arq_cliente)!=1){
printf("Registro inexistente\n\n");
} else {

system("cls");
printf ("\nNumero do cliente: %d", cli_registrado.num_imp);
printf ("\nNome do cliente: ");
puts (cli_registrado.nome_cliente);
printf ("Quantidade de copias pretas: %d ", cli_registrado.quant_preta);
printf("\nQuantidade de copias coloridas: %d ", cli_registrado.quant_colorida);
printf("\nData do cadastro: ");
puts (cli_registrado.data_imp);

cli_altera = cli_registrado;
printf("\n---------------------------------");
printf("\n1 - Alterar o nome\n");
printf("2 - Alterar impressão preta\n");
printf("3 - Alterar impressão colorida\n");
scanf("%d",&c);
printf("\n");

switch ©{
case 1:
printf("Digite o nome: \n");
fflush(stdin);
gets(cli_altera.nome_cliente);
break;

case 2:
printf("Digite o numero de copias pretas: \n");
scanf("%d", &cli_altera.quant_preta);
break;

case 3:
printf("Digite o numero de copias coloridas: \n");
scanf("%d", &cli_altera.quant_colorida);
break;

}
fseek(arq_cliente,i*sizeof(clientes),SEEK_SET);
fwrite(&cli_altera,sizeof(clientes),1,arq_cliente);
fclose(arq_cliente);
printf("Dados Alterados com Sucesso\n");
system("pause");
system("cls");
}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá de novo:

1- Fflush na entrada padrão -> comportamento indefinido. Não use.

2- Gets é inseguro porque leva a buffer overflow (assim como scanf sem delimitação de tamanho)

 

Cade o resto do código?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.