Jump to content

Recommended Posts

Posted

Boas,

o meu problema é o seguinte.. tenho uma estrutura..

depois posso inserir dados no array q quero.. de motas, carros ou camioes ( dado q é 1 projecto do dakar).

depois quero gravar a informacao e isto dame erro..

aqui ta o codigo para gravar:

void EscreverFicheiro(veiculos *arrayFicheiro, int i, char nomeficha) {

     FILE *fp;
         fp = fopen (nomeficha,"wt");
         if (fp == NULL) {
		 printf("Erro na abertura de %s",nomeficha);
         getch();
         exit(1); }
     for (i=0; i<250; i++) {
     fprintf (fp, "%d \n", arrayFicheiro[i].numero);
     fprintf (fp, "%s \n", arrayFicheiro[i].piloto);
     fprintf (fp, "%s \n", arrayFicheiro[i].equipa);
     fprintf (fp, "%s \n", arrayFicheiro[i].marca);
 fprintf (fp, "%s \n", arrayFicheiro[i].modelo);
     fprintf (fp, "%s \n", arrayFicheiro[i].copiloto);
 fprintf (fp, "%s \n", arrayFicheiro[i].assistente);
 fprintf (fp, "%s \n", arrayFicheiro[i].nacionalidade);
 fprintf (fp, "%s \n", arrayFicheiro[i].classificacao);
 fprintf (fp, "%d \n", arrayFicheiro[i].hh1);
 fprintf (fp, "%d \n", arrayFicheiro[i].mm1);
 fprintf (fp, "%d \n", arrayFicheiro[i].ss1);
 fprintf (fp, "%d \n", arrayFicheiro[i].hh2);
 fprintf (fp, "%d \n", arrayFicheiro[i].mm2);
 fprintf (fp, "%d \n", arrayFicheiro[i].ss2);
 fprintf (fp, "%d \n", arrayFicheiro[i].finalHH);
 fprintf (fp, "%d \n", arrayFicheiro[i].finalMM);
 fprintf (fp, "%d \n", arrayFicheiro[i].finalSS);
 }
     fclose(fp);
}

ao chamar a funcao na saida do programa.. ele dá erro.. um debug qualquer.. logo nao estou a ver qual poderá ser o problema..

alguem pode verificar se tou a fazer algo mal na funcao? pq o programa corre todo.. da é erro ao sair..

tou a chamar a funcao da seguinte maneira: EscreverFicheiro(Motas,250,"motas.dat");

pois quero gravar os dados apenas das motas no fixeiro motas.dat.

se me puderem ajudar.. é q tenho q entregar isto amanha 😛

cumps

Posted
void EscreverFicheiro(veiculos *arrayFicheiro, int i, char nomeficha[20]) {

A variável nomeficheiro não tinha tamanho, sendo uma string é melhor alocar espaço. 😛

Já agora porque abres o ficheiro na forma wt? Não conheço esse tipo...  ?

Mas não encontrei mais nenhum erro no código. ..

PS: Da próxima utiliza o GeSHi para identar o código. 🙂

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Posted

entao em q forma mais facil devo guardar?

pq depois terei q ter outra funcao para puder abrir o fixeiro no inicio do programa.. para fazer load aos dados, coisa q tambem nao sei o q usar ( wt, ou outro).

cumps

Posted

kual é o erro k o compilador da?

se o array é um apontador para uma estrutura, entao tens k aceder aos campos dessa mesma estrutura com ->, ou entao mudas no parametro da função e nao metes o *(mas depois tens k ter em atenção o k mandas para a função).  O fopen recebe como parametro um apontador para um cadeia de caracteres (string) que é o nome do ficheiro.  por isso é char * nomeficha

mas convém mostrares o erro do compilador...

Engenharia de Redes e Sistemas Informáticos, DCC-FCUP. www.dcc.fc.up.pt

Posted

o q axo mais engracado.. ao salvar apenas uns dados poukissimos.. guardame um fixeiro com 80 e tal MB.. muito estranho penso eu nao?

void EscreverFicheiro(veiculos *arrayFicheiro, int i, char *nomeficha[20]) { 

     FILE *fp;
         fp = fopen (nomeficha,"wt"); // o wt faz w->write t-> em texto
         if (fp == NULL) {
		 printf("Erro na abertura de %s",nomeficha);
         getch();
         exit(1); }
     for (i=0; i<250; i++) {
     fprintf (fp, "%d \n", arrayFicheiro[i].numero);
     fprintf (fp, "%s \n", arrayFicheiro[i].piloto);
     fprintf (fp, "%s \n", arrayFicheiro[i].equipa);
     fprintf (fp, "%s \n", arrayFicheiro[i].marca);
 fprintf (fp, "%s \n", arrayFicheiro[i].modelo);
     fprintf (fp, "%s \n", arrayFicheiro[i].copiloto);
 fprintf (fp, "%s \n", arrayFicheiro[i].assistente);
 fprintf (fp, "%s \n", arrayFicheiro[i].nacionalidade);
 fprintf (fp, "%d \n", arrayFicheiro[i].classificacao);
 fprintf (fp, "%d \n", arrayFicheiro[i].hh1);
 fprintf (fp, "%d \n", arrayFicheiro[i].mm1);
 fprintf (fp, "%d \n", arrayFicheiro[i].ss1);
 fprintf (fp, "%d \n", arrayFicheiro[i].hh2);
 fprintf (fp, "%d \n", arrayFicheiro[i].mm2);
 fprintf (fp, "%d \n", arrayFicheiro[i].ss2);
 fprintf (fp, "%d \n", arrayFicheiro[i].finalHH);
 fprintf (fp, "%d \n", arrayFicheiro[i].finalMM);
 fprintf (fp, "%d \n", arrayFicheiro[i].finalSS);
 }
     fclose(fp);
}

ao gravar dados inseridos..nem q seja 1 dado apenas, fica a 86mb +/-..

depois tenho outra funcao.. para fazer "load".. q é esta:

void LerFicheiro(veiculos *arrayFicheiro, int i, char *nomeficha[20]) {

     FILE *fp;
         fp = fopen (nomeficha,"rt");
         if (fp == NULL) {
		 printf("Erro na abertura de %s",nomeficha);
         getch();
         exit(1); }
     for (i=0; i<250; i++) {
     fscanf (fp, "%d \n", arrayFicheiro[i].numero);
     fscanf (fp, "%s \n", arrayFicheiro[i].piloto);
     fscanf (fp, "%s \n", arrayFicheiro[i].equipa);
     fscanf (fp, "%s \n", arrayFicheiro[i].marca);
 fscanf (fp, "%s \n", arrayFicheiro[i].modelo);
     fscanf (fp, "%s \n", arrayFicheiro[i].copiloto);
 fscanf (fp, "%s \n", arrayFicheiro[i].assistente);
 fscanf (fp, "%s \n", arrayFicheiro[i].nacionalidade);
 fscanf (fp, "%s \n", arrayFicheiro[i].classificacao);
 fscanf (fp, "%d \n", arrayFicheiro[i].hh1);
 fscanf (fp, "%d \n", arrayFicheiro[i].mm1);
 fscanf (fp, "%d \n", arrayFicheiro[i].ss1);
 fscanf (fp, "%d \n", arrayFicheiro[i].hh2);
 fscanf (fp, "%d \n", arrayFicheiro[i].mm2);
 fscanf (fp, "%d \n", arrayFicheiro[i].ss2);
 fscanf (fp, "%d \n", arrayFicheiro[i].finalHH);
 fscanf (fp, "%d \n", arrayFicheiro[i].finalMM);
 fscanf (fp, "%d \n", arrayFicheiro[i].finalSS);
 }
     fclose(fp);
}

q depois apareceme 1 janela de debugger..nao consegue ler o fixeiro..

caso eu nao tenha o fixeiro criado, ele diz q nao consegue ler o fixeiro.. se ta criado la com os 86mb atrofia-se..

depois apaguei tudo o q tava dentro do motas.dat e ele consegue correr a funcao para fazer load ao fixeiro.. nao é mto estranho?

se me conseguissem ajudar agradecia 😛

cumps

Posted

isto é um vector de strings: char *nomeficha[20]

fazes char *nomeficha  ou  char nomeficha[20]

o "i" que entra como parametro na função é o ke?

tas a fazer um ciclo ate 250....

Engenharia de Redes e Sistemas Informáticos, DCC-FCUP. www.dcc.fc.up.pt

Posted

tou tramado mesmo com isto.. n consigo por isto decentemente..

tenho 1 array pa motas, outro pa carros e outro pa camioes..

depois keria gravar cada coisa no seu sitio..

tenho esta cena feita.. meto a correr.. etc.. e dps gravame cenas de 86mb.. nao sei mesmo o q sera.. mto estranho 😛

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.