como atualizar o valor de um campo dentro de um arquivo binario [RESOLVIDO]

1. como atualizar o valor de um campo dentro de um arquivo binario [RESOLVIDO]

lucas
lucachf

(usa Ubuntu)

Enviado em 04/12/2015 - 15:25h

preciso ler um valor do teclado para realizar saque ou deposito, ate ai tudo bem o problema e que nao consigo realizar a alteracao dentro do arquivo, ele cria uma nova conta







codigo da funcao:

void movimentacao_conta(FILE *conta,FILE *movimentacao,int opcao){/*funcao para salvar movimentacoes de conta no arquivo*/
tipo_conta f;
float valor;
tipo_movimentacao mf;
long int idconta;
int i,t,achou,op;
fseek(conta,0,SEEK_END);
i=ftell(conta)/sizeof(tipo_conta);
if(i<1)
printf("\nNenhuma conta cadastrada!!!");
else{
lista_conta(conta);
do{
printf("\n\nForneca o numero da conta: ");
scanf("%ld",&idconta);
achou=pesquisa_conta(conta,idconta);
printf("\nACHOU %d",achou);
if(achou==-1)
printf("\nConta nao encontrada!!");
else{
fseek(conta,achou*sizeof(tipo_movimentacao),SEEK_CUR);
fscanf(conta,"%f",f.saldo);
printf("saldo %f",f.saldo);
fread(&f,achou*sizeof(tipo_conta),1,conta);

fseek(movimentacao,0,SEEK_END);
t=ftell(movimentacao)/sizeof(tipo_movimentacao);
printf("\nDigite o valor: ");
scanf("%f",&valor);
printf("\nVALOR %.2f",valor);
printf("\nAchou %d",achou);
fread(&f,achou*sizeof(tipo_conta),0,conta);
printf("\nSeu saldo anterior: R$ %.2f",f.saldo);
if(opcao==4){
f.saldo=f.saldo+valor;
mf.tipomovimentacao='C';
printf("\nDepoito de R$ %.2f realizado com sucesso!!",valor);
printf("\nSeu saldo atualizado: R$ %.2f",f.saldo);
}
else{
f.saldo=f.saldo+valor;
mf.tipomovimentacao='D';
printf("\nSaque de R$ %.2f realizado com sucesso!!",valor);
printf("\nSeu saldo atualizado: R$ %.2f",f.saldo);
}

mf.idmovimentacao=t+1;
mf.idconta=idconta;
mf.idcliente=f.idcliente;
mf.valor=valor;
printf("\nDIgite a data de hoje: ");
funcao_data(mf.data);
fwrite(&mf,sizeof(tipo_movimentacao),1,movimentacao);

fwrite(&f,sizeof(tipo_conta),1,conta);
}
printf("\nDeseja sair? 1-SIM 2-NAO: ");
scanf("%d",&op);
}while(fread(&f,sizeof(tipo_conta),1,conta)==1||op!=1);
}
}



  


2. Re: como atualizar o valor de um campo dentro de um arquivo binario [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/12/2015 - 16:24h

Com que modos os arquivos foram abertos nas chamadas a fopen()? Se você tiver usado "a" ou "a+", não pode esperar que ele sobrescreva o valor de um registro.

No seu código (que eu não olhei inteiro) vi uma coisa estranha: sobre o mesmo arquivo apontado por conta, ora você você opera com sizeof(tipo_conta), ora com sizeof(tipo_movimentacao). Mesmo sem ter lido tudo, acho que dificilmente você quer mesmo misturar as duas coisas, e as coisas só vão funcionar corretamente se você tiver dado o AZAR (porque a ocultação de um bug patente por pura coincidência não pode ser chamada se “sorte”) de os dois tipos distintos calharem de ter o mesmo tamanho.


3. Re: como atualizar o valor de um campo dentro de um arquivo binario [RESOLVIDO]

lucas
lucachf

(usa Ubuntu)

Enviado em 04/12/2015 - 17:25h

paulo1205 escreveu:

Com que modos os arquivos foram abertos nas chamadas a fopen()? Se você tiver usado "a" ou "a+", não pode esperar que ele sobrescreva o valor de um registro.

No seu código (que eu não olhei inteiro) vi uma coisa estranha: sobre o mesmo arquivo apontado por conta, ora você você opera com sizeof(tipo_conta), ora com sizeof(tipo_movimentacao). Mesmo sem ter lido tudo, acho que dificilmente você quer mesmo misturar as duas coisas, e as coisas só vão funcionar corretamente se você tiver dado o AZAR (porque a ocultação de um bug patente por pura coincidência não pode ser chamada se “sorte”) de os dois tipos distintos calharem de ter o mesmo tamanho.




Valeu Paulo,eu tava abrindo com ab+ por isso que nao ia






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts