[Ajuda]Guardar estrutura 50 vezes/C++

Patrick_maura

Power Member
Código:
struct dados{
        int finalidade;
        int destino_habitação;
        int garagem_parq;
        int localização;
        int condição_def;
    };

Quero guardar os dados desta estrutura num ficheiro e quero garantir que só podem ficar guardadas 50 vezes. Depois ao guardar outra vez os dados (ou seja, pela 51 vez) os que se encontram em primeiro lugar são apagados e os outros deslocam se uma posição para puderem ser guardados os novos dados na ultima posição.

Como faço??

desculpem se a forma como me expresso não é a mais correcta.
 
Guardas as 50 estruturas num ficheiro. De seguida posicionas-te nesse ficheiro no início da 2ª estrutura (através da função fseek), e copias as 49 estruturas seguintes para um outro ficheiro. De seguida basta escreveres a nova estrutura no fim desse novo ficheiro (fopen com o modo append).
 
acho que não é isso que ele quer, se percebi bem.

ele quer ir guardando as estruturas no ficheiro, e não deixar guardar mais quando já tiver 50.

mas vai dar um bocado ao mesmo. podes por uma espécie de título de cada vez que inseres, tipo:

estrutura_1

finalidade
destino
garagem
local
condiçao

-----------------
estrutura_2

finalidade
...


depois com o fseek verificas qual é o ultimo título inserido. se for estrutura_50 não deixa inserir, senão insere com o título com o número seguinte
secalhar há uma maneira melhor, mas foi o que me lembrei
 
Sim eu quero é ir guardando e quando chegar a 50 nao deixar guardar mais sem apagar a primeira.

Código:
FILE*pf;
dados tabela [50];//dados é a estrutura
pf=fopen("Simulações.TXT", "rb");
if(!pf){
printf("Não criou o ficheiro");
exit(1);
}
i=0;
while(fread(&tabela[i],sizeof(dados),1,pf)!=0){
i++;
}fclose(pf);
if(i==50)
   for(j=0;j<50;j++){
       tabela[j-1]=tabela[j];
   tabela[j-1]=dados_presentes//novos dados que quero guardar
   }
else
  tabela[i]=dados_presentes;

pf=fopen("Simulações.TXT", "wb")
fwrite(tabela,sizeof(dados),1,pf);
fclose(pf)
}

Será que desta forma está correcto?
 
De inicio parece que irá dar algum erro mas vendo bem talvez não porque o j vai de 0 a 50 logo, quando acontece j[-1]=j[0] não vai guardar nada porque j[-1] não se encontra dentro do ciclo..No entanto não tenho a certeza e ainda não posso experimentar a compilar porque ainda me falta mais de metade do programa.

Tirando isso achas que dá resultado?
 
Back
Topo