Upper Posted January 8, 2010 at 06:53 PM Report Share #304867 Posted January 8, 2010 at 06:53 PM Boas...tou com um pequeno problema. Quando faço o mostrar o que se encontra na estrutura(depois de ter inserido nela apartir de um ficheiro) so me aparece a ultima linha do ficheiro. O que falta na leitura do ficheiro? RESERVA tabela_reservas[5000]; void ler_ficheiro(RESERVA *tabela_reservas) { FILE *fp; char ficheiro[NOMES]; int i = 0; fprintf(stdout, "Introduza o nome do ficheiro: "); fscanf(stdin," %s",ficheiro); fp = fopen(ficheiro,"r"); if(fp == NULL) { printf(">>Impossivel abrir ficheiro %s!<<\n",ficheiro); return; } else{ while(!feof(fp)) { fscanf(fp, "%d", &tabela_reservas->pass.bi); fgets(tabela_reservas->pass.nome, NOMES, fp); fscanf(fp, "%s", tabela_reservas->cid_part); fscanf(fp, "%s", tabela_reservas->cid_cheg); fscanf(fp, "%d", tabela_reservas->dia); i++; } } printf("\nAberto com sucesso!\n"); fclose(fp); } Link to comment Share on other sites More sharing options...
mogers Posted January 8, 2010 at 08:05 PM Report Share #304878 Posted January 8, 2010 at 08:05 PM Repara que tens uma variável i, mas a unica coisa que fazes com ela é incrementar e não a usas como indice. tabela_reservas->cid_part É equivalente a tabela_reservas[0].cid_part Porque o nome de um array serve como apontador para a primeira posição desse array. Ou seja, tu estás sempre a escrever a informação sobre a primeira posição. Tens de usar tabela_reservas[i].cid_part (utilizando a variavel i que já tens, ou um apontador como o tabela_reservas e ir incrementando o apontador em vez de i. A variavel i passaria a ser inutil) PS: não vejo nada para guardar quantos registos tens. Tem atenção a isso. "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação. Link to comment Share on other sites More sharing options...
Upper Posted January 8, 2010 at 08:30 PM Author Report Share #304880 Posted January 8, 2010 at 08:30 PM PS: não vejo nada para guardar quantos registos tens. Tem atenção a isso. Como assim? nao tou a perceber Link to comment Share on other sites More sharing options...
Localhost Posted January 8, 2010 at 08:48 PM Report Share #304882 Posted January 8, 2010 at 08:48 PM O que o mogers estava a dizer basicamente é que tu para guardares dados nas structs tens de colocar o indice, uma variável auxiliar, porque o nome de um array é um ponteiro para o primeiro elemento, se tu não colocares o indice ou modificares o valor da variável auxiliar ele vai estar a guardar sempre na mesma posição (no mesmo array). here since 2009 Link to comment Share on other sites More sharing options...
Upper Posted January 8, 2010 at 08:52 PM Author Report Share #304883 Posted January 8, 2010 at 08:52 PM hmmm....entao basta fazer as modificacoes como o mogers disse e assim tou a guardar ne? Link to comment Share on other sites More sharing options...
Localhost Posted January 8, 2010 at 08:54 PM Report Share #304884 Posted January 8, 2010 at 08:54 PM Exacto, colocares uma variável auxiliar para ver em que posição do array de structs estás. here since 2009 Link to comment Share on other sites More sharing options...
Upper Posted January 8, 2010 at 08:56 PM Author Report Share #304885 Posted January 8, 2010 at 08:56 PM ok obrigado mogers e Localhost Link to comment Share on other sites More sharing options...
Localhost Posted January 8, 2010 at 08:58 PM Report Share #304887 Posted January 8, 2010 at 08:58 PM Sempre às ordens 👍 here since 2009 Link to comment Share on other sites More sharing options...
mogers Posted January 8, 2010 at 09:29 PM Report Share #304893 Posted January 8, 2010 at 09:29 PM Como assim? nao tou a perceber Quando sais dessa função de leitura, ficas sem saber quantos registos é que o array tem. Assim, convinha que usasses algum metodo para que a função que chama o ler_ficheiro saiba quantos existem (e.g. a função pode retornar esse número ou usar um parametro que é um apontador para um int e colocas aí a informação). "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação. Link to comment Share on other sites More sharing options...
Upper Posted January 13, 2010 at 09:10 AM Author Report Share #305821 Posted January 13, 2010 at 09:10 AM tou agora com outro problema: como e que eu faço pra escrever num ficheiro o que se encontras na struct? int escrever_ficheiro(RESERVA *tabela_reservas) { FILE *fp; char ficheiro[NOMES]; int i = 0, n = 0; char string[NOMES]; fprintf(stdout, "Introduza o nome do ficheiro: "); fscanf(stdin," %s",ficheiro); fp = fopen(ficheiro,"wb"); if(fp == NULL) { printf("\n>>Impossivel abrir ficheiro %s!<<\n",ficheiro); return ZERO; } else{ for(i=0;i<tabela_reservas->num_pass;i++) if(fwrite(tabela_reservas[i].pass.bi,sizeof(tabela_reservas.pass.bi),1,fp)!=1) return ZERO; } fclose(ficheiro); return ZERO; } A minha duvida e: o que meto na parte do sizeof? EDIT: a tag é code, não quote. Link to comment Share on other sites More sharing options...
Localhost Posted January 13, 2010 at 11:01 PM Report Share #305978 Posted January 13, 2010 at 11:01 PM No sizeof tens de colocar o tipo da estrutura que definiste quando a criaste. Assim: struct typeteste { int blabla; }; sizeof(struct typeteste); Não coloquei toda a sintaxe da função fwrite mas acho que deu para perceber. here since 2009 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