PlasticFX Posted January 21, 2007 at 11:12 PM Report #77694 Posted January 21, 2007 at 11:12 PM 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
Hipnoted Posted January 21, 2007 at 11:18 PM Report #77697 Posted January 21, 2007 at 11:18 PM 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"
PlasticFX Posted January 21, 2007 at 11:20 PM Author Report #77699 Posted January 21, 2007 at 11:20 PM 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
Tool Posted January 21, 2007 at 11:21 PM Report #77700 Posted January 21, 2007 at 11:21 PM 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
PlasticFX Posted January 21, 2007 at 11:25 PM Author Report #77702 Posted January 21, 2007 at 11:25 PM o problema é q ao correr, ele da um erro qualquer.. ( com o visual studio.. nao é na propria zona de erros..). aparece 1 quadrado.. pa selecionar q debugger kero usar :S
PlasticFX Posted January 21, 2007 at 11:45 PM Author Report #77707 Posted January 21, 2007 at 11:45 PM 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
Tool Posted January 21, 2007 at 11:49 PM Report #77708 Posted January 21, 2007 at 11:49 PM 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
PlasticFX Posted January 22, 2007 at 12:20 AM Author Report #77718 Posted January 22, 2007 at 12:20 AM 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 😛
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now