Issacar 0 Denunciar post Postado Abril 29, 2015 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
_Isis_ 202 Denunciar post Postado Abril 30, 2015 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