nando_ice Posted May 25, 2006 at 02:59 PM Report Share #29473 Posted May 25, 2006 at 02:59 PM preciso de ajuda estou a fazer um programa k consiste na criacao de uma esturar de uma companhia de gas... tenho um problemas na minha funcao inserir sempre k tento inserir um novo ele cria-me outro fixeiro, alguem me pode ajudar?'?? aki vai o exerto do programa se precisarem de mais alguma coisa digam!! cumps fernando lopes void inserir(void) { char resp; FILE *f; if ((f=fopen("dadoscliente.dat","w+"))==NULL) { f=fopen("dadoscliente.dat","w"); } do { printf("Codigo Cliente: "); scanf("%d",®.codigo); printf("Nome: "); fflush(stdin); gets(reg.nome); printf("Rua: "); fflush(stdin); gets(reg.rua); printf("Numero porta: "); fflush(stdin); scanf("%d",®.numporta); printf("Andar: "); fflush(stdin); gets(reg.andar); printf("Localidade: "); fflush(stdin); gets(reg.localidade); printf("Numero garrafas compradas: "); fflush(stdin); scanf("%d",®.numgarrafas); fseek(f,0,SEEK_END); fwrite(®,sizeof(reg),1,f); printf("Novo cliente? (s/n)"); do { scanf("%c",&resp); }while (resp!='n' && resp!='s'); }while (resp!='n'); fclose(f); } Link to comment Share on other sites More sharing options...
brink@ero Posted May 25, 2006 at 03:22 PM Report Share #29474 Posted May 25, 2006 at 03:22 PM Bem vindo ao fórum nando_ice. Usa a ferramenta GeSHi para postares código, assim o teu código fica mais legível para os leitores, como podes ver agora. Sobre o teu problema, deve-se ao modo de abertura do ficheiro, o que deves querer é isto: fopen("dadoscliente.dat","a+") Dá uma leitura nesta thread: Portugal-a-Programar | Linguagens | C | structs e ficheiros Espero ter resolvido o problema, cumpr. bk@ero 😁 Link to comment Share on other sites More sharing options...
nando_ice Posted May 25, 2006 at 04:27 PM Author Report Share #29492 Posted May 25, 2006 at 04:27 PM mas kando ponho o +a depois ira-me dar um erro que nao ocorre no c++ e nao me executar a funcao eliminar pk nao cria o "fixeiro temp.dat" e depois nao muda de nome para "dadoscliente.dat". remove("dadosclliente.dat"); rename("temp.dat, dadoscliente"); Link to comment Share on other sites More sharing options...
brink@ero Posted June 7, 2006 at 04:57 PM Report Share #31639 Posted June 7, 2006 at 04:57 PM mas kando ponho o +a depois ira-me dar um erro que nao ocorre no c++ e nao me executar a funcao eliminar pk nao cria o "fixeiro temp.dat" e depois nao muda de nome para "dadoscliente.dat". remove("dadosclliente.dat"); rename("temp.dat, dadoscliente"); Não percebi, podias explicar melhor o teu problema? Eu não vejo no código isso do remove e rename. Tu para apagares/mudares de nome dum ficheiro, tens de o encerrar primeiro. Por isso essas instruções devem aparecer depois do fclose(f). Cumpr. bk@ero ? Link to comment Share on other sites More sharing options...
nando_ice Posted June 9, 2006 at 12:08 AM Author Report Share #32006 Posted June 9, 2006 at 12:08 AM essa parte estava na funcao eliminar e funcionava bem mas cada vez k eu metia a+ na minha funcao inserir havia um tipo de conflito! aparecia acess violation, logo tive de optar por outros meios Link to comment Share on other sites More sharing options...
theproject Posted June 12, 2006 at 09:12 PM Report Share #32625 Posted June 12, 2006 at 09:12 PM o brinkaero esta certo, tens de abrir o ficheiro em modo append. ( a+ ) senao ele escreve sp no principio, isso de te dar erro deve ser por outra causa... Link to comment Share on other sites More sharing options...
nando_ice Posted June 14, 2006 at 12:16 AM Author Report Share #32876 Posted June 14, 2006 at 12:16 AM void inserir(void) { char resp; FILE *f; if ((f=fopen("dadoscliente.dat","r+"))==NULL) { f=fopen("dadoscliente.dat","w"); reg.codigo=0; } else{ fseek(f,0,SEEK_END); fseek (f,ftell(f)-sizeof(reg),SEEK_SET); fread(®,sizeof(reg),1,f); } do { reg.codigo=reg.codigo+1; printf("Codigo de cliente: %d\n",reg.codigo); printf("Nome: "); fflush(stdin); gets(reg.nome); printf("Rua: "); fflush(stdin); gets(reg.rua); printf("Numero porta: "); fflush(stdin); scanf("%d",®.numporta); printf("Andar: "); fflush(stdin); gets(reg.andar); printf("Localidade: "); fflush(stdin); gets(reg.localidade); printf("Numero garrafas compradas: "); fflush(stdin); scanf("%d",®.numgarrafas); fseek(f,0,SEEK_END); fwrite(®,sizeof(reg),1,f); printf("Novo cliente? (s/n)"); do { scanf("%c",&resp); }while (resp!='n' && resp!='s'); }while (resp!='n'); fclose(f); } tenho aki o codigo e agora funciona a 100%, nao preciso do "a+" tb podes por no "fseek(f,0,SEEK_END);" e ele ira sempre para o ultimo registo... Link to comment Share on other sites More sharing options...
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