Dúvida sobre salvar arquivo

1. Dúvida sobre salvar arquivo

Talles Fernando Silva
inluxbdx

(usa Ubuntu)

Enviado em 12/06/2015 - 21:49h

Boa noite pessoal;

Estou com uma dúvida sobre como gravar registros diferentes em um único arquivo. Estou implementando um trabalho, que é um jogo de Batalha Naval, e nessa versão, deverá ser implementado um ranking, com o nome de todos os jogadores com sua respectiva pontuação.

Após o encerramento da partida, chamo uma função, chamada save_bin, que salva as structs do jogador e computador, com os dados necessários para o ranking. Porém quando leio o arquivo, ele me retorna somente o último, onde todos os outros que jogaram se perderam.

Será que alguém poderia me explicar esse lance de salvar registros diferentes em um único arquivo? Eu procurei no fórum outro tópico sobre o assunto, porém não encontrei.




  


2. Re: Dúvida sobre salvar arquivo

Piter Alt
piteralt

(usa Debian)

Enviado em 13/06/2015 - 08:34h

Verifique qual o modo de abertura você utilizou, alguns modos podem sobrescrever o arquivo perdendo assim todo o conteúdo anterior. Verifique também se está adicionando a nova informação ao final do arquivo.

Uma questão, se um jogador jogar novamente, seu ranking deverá ser atualizado? Se sim, a situação é mais complexa, pois não é simplesmente adicionar no final do arquivo, é também identificar se o jogador já jogou antes, encontrar essa informação no arquivo, atualiza-la sem danificar os dados vizinhos dos rankings de outros jogadores, etc...

Qualquer coisa, poste o código das funções responsáveis pela leitura e gravação.

Espero ter ajudado.
Boa Sorte.


3. Re: Dúvida sobre salvar arquivo

Talles Fernando Silva
inluxbdx

(usa Ubuntu)

Enviado em 13/06/2015 - 10:53h


Então, na verdade tem que verificar tudo isso. Por que o jogador pode salvar a partida (o estado atual) e carregar depois. A função que tó usando pra salvar tá bem enxuta, acredito que tenho que verificar se o usuário já está no save, e atualizar a linha correspondente a ele. Assim como na leitura do save.bin e do ranking.bin.

void save_bin(Tabuleiro *jogador, Tabuleiro *computador){

char ch, sair;
printf("Deseja sair do jogo \n");
getchar();
scanf("%c", &sair);

if(sair=='S' || sair=='s'){
printf("Deseja salvar a partida? \n");
getchar();
scanf("%c",&ch);
if(ch=='S' || ch=='s'){
FILE* fp = fopen("save.bin", "wb+");
if(fp==NULL){
printf("Erro ao abrir o arquivo\n");
exit(EXIT_FAILURE);
}
fread(jogador, sizeof(Tabuleiro),1,fp);
fread(computador, sizeof(Tabuleiro),1,fp);
fwrite(jogador,sizeof(Tabuleiro),1,fp);
fwrite(computador,sizeof(Tabuleiro),1,fp);
fclose(fp);
printf("Salvando...\n");
printf("Retornando ao menu inicial ... \n");
limpa_tela_enter();
}else if(ch=='N' || ch=='n') {
getchar();
limpa_tela_enter();
}
} else if(sair=='N' || sair=='n') {
getchar();
limpa_tela_enter();
}
}


4. Re: Dúvida sobre salvar arquivo

Piter Alt
piteralt

(usa Debian)

Enviado em 13/06/2015 - 11:55h

inluxbdx escreveu:
FILE* fp = fopen("save.bin", "wb+");
if(fp==NULL){
printf("Erro ao abrir o arquivo\n");
exit(EXIT_FAILURE);
}
fread(jogador, sizeof(Tabuleiro),1,fp);
fread(computador, sizeof(Tabuleiro),1,fp);
fwrite(jogador,sizeof(Tabuleiro),1,fp);
fwrite(computador,sizeof(Tabuleiro),1,fp);
fclose(fp);

Pra começar, tente utilizar o modo rb+






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts