1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[Ajuda]Guardar estrutura 50 vezes/C++

Discussão em 'Programação' iniciada por Patrick_maura, 30 de Maio de 2008. (Respostas: 6; Visualizações: 852)

  1. Patrick_maura

    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.
     
  2. Baderous

    Baderous Banido

    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).
     
  3. MPalhas

    MPalhas Power Member

    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
     
  4. Baderous

    Baderous Banido

    Ele quer fazer overwrite dos dados, por isso acho que é da forma que eu estou a pensar...
     
  5. Patrick_maura

    Patrick_maura Power Member

    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?
     
  6. Baderous

    Baderous Banido

    tabela[j-1]=tabela[j]

    Isto não vai dar erro para a 1ª posição (tabela[-1]=tabela[0]) ?
     
  7. Patrick_maura

    Patrick_maura Power Member

    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?
     

Partilhar esta Página