|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2006
Città: Monza
Messaggi: 3686
|
[C]Problemi con feof()
Ciao a tutti. Ho fatto questi tre programmi per esercitarmi con i file. Tutto funziona fino a che nei vari for metto il numero di cicli pari ad un numero, ma quando lo cambio con feof, allora cominciano i problemi, il primo record mi si sballa
![]() Ecco i programmi: 1)Carico il file Codice:
#include <stdlib.h> #include <stdio.h> struct rec { char titolo[30], autore[30]; float durata; }; int main() { struct rec cd; int i; FILE*list; list=fopen("dati.bin", "w"); for(i=0;i<3;i++) { printf("Titolo?\n"); scanf("%s", cd.titolo); printf("Autore?\n"); scanf("%s", cd.autore); printf("Durata (in minuti)?\n"); scanf("%f", &cd.durata); fwrite(&cd,sizeof(struct rec),1,list); system("CLS"); } fclose(list); system("PAUSE"); return 0; } Codice:
#include <stdlib.h> #include <stdio.h> struct rec { char titolo[30], autore[30]; float durata; }; int main() { struct rec cd; int i; FILE*list; list=fopen("dati.bin", "r"); for(i=0;i=!feof(list);i++) { fread(&cd,sizeof(struct rec),1,list); printf("Titolo %s \n", cd.titolo); printf("Autore %s \n", cd.autore); printf("Durata:%f \n", cd.durata); } fclose(list); system("PAUSE"); return 0; } Codice:
#include <stdlib.h> #include <stdio.h> #include <string.h> struct rec { char titolo[30], autore[30]; float durata; }; int show_user(struct rec cd,FILE*list) { char titolo[30]; int i; list=fopen("dati.bin", "r"); printf("Titolo dell'album che vuoi cercare?\n"); scanf("%s", titolo); for(i=0;i=!feof(list);i++) { fread(&cd,sizeof(struct rec),1,list); if((strcmp(titolo,cd.titolo))==0) { printf("Titolo %s \n", cd.titolo); printf("Autore %s \n", cd.autore); printf("Durata:%f \n", cd.durata); } } fclose(list); return 0; } int edit_user(struct rec cd,FILE*list) { char titolo[30]; int i,n; list=fopen("dati.bin", "r+"); printf("Titolo dell'album che vuoi modificare?\n"); scanf("%s", titolo); for(i=0;i=!feof(list);i++) { fread(&cd,sizeof(struct rec),1,list); if(strcmp(titolo,cd.titolo)==0) n=i; } fseek(list,n,0); printf("Titolo?\n"); scanf("%s", cd.titolo); printf("Autore?\n"); scanf("%s", cd.autore); printf("Durata (in minuti)?\n"); scanf("%f", &cd.durata); fwrite(&cd,sizeof(struct rec),1,list); return 0; } int add(struct rec cd,FILE*list) { list=fopen("dati.bin", "a"); printf("Titolo?\n"); scanf("%s", cd.titolo); printf("Autore?\n"); scanf("%s", cd.autore); printf("Durata (in minuti)?\n"); scanf("%f", &cd.durata); fwrite(&cd,sizeof(struct rec),1,list); fclose(list); return 0; } int main() { struct rec cd; int i,function1; FILE*list; show_user(cd,list); edit_user(cd,list); add(cd,list); system("PAUSE"); return 0; } Tha a lot
__________________
" Disprezzato e reietto dagli uomini, uomo dei dolori che ben conosce il patire, come uno davanti al quale ci si copre la faccia, era disprezzato e non ne avevamo alcuna stima." ... "Maltrattato, si lasciò umiliare e non aprì la sua bocca; era come agnello condotto al macello, come pecora muta di fronte ai suoi tosatori, e non aprì la sua bocca" |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Togli i= dalla condizione, lascia solo !feof(list).
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: May 2006
Città: Monza
Messaggi: 3686
|
Ok, grazie! Ora il primo problema l'ho risolto. Per quella storia che se per esempio: ho un record di 3, con la funzione add ne aggiungo uno, poi torno in carica e carico i tre record, ma il terzo appena immesso mi viene copiato nel 4, sai qualcosa ? Thx
EDIT: ho provato a cancellare il file bin contenente l'archivio e caricando i record con il primo programma (quindi 3 in totatle) mi appaiono ancora 4 record e il terzo mi viene copiato nel 4. Come mai?
__________________
" Disprezzato e reietto dagli uomini, uomo dei dolori che ben conosce il patire, come uno davanti al quale ci si copre la faccia, era disprezzato e non ne avevamo alcuna stima." ... "Maltrattato, si lasciò umiliare e non aprì la sua bocca; era come agnello condotto al macello, come pecora muta di fronte ai suoi tosatori, e non aprì la sua bocca" Ultima modifica di stgww : 15-05-2008 alle 19:10. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Non ho letto attentamente perché vado di fretta, ma secondo me il comportamento di edit_user() non è corretto: appena trovi il record giusto direi che puoi interrompere la lettura, quindi n diventa superflua e puoi dare un break invece di memorizzare l'indice e leggere fino alla fine. Inoltre, fseek() non è usata bene, avresti dovuto dare un:
Codice:
fseek(list, n*sizeof(struct rec), SEEK_SET); Prova, magari risolve.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: May 2006
Città: Monza
Messaggi: 3686
|
Quote:
Thx
__________________
" Disprezzato e reietto dagli uomini, uomo dei dolori che ben conosce il patire, come uno davanti al quale ci si copre la faccia, era disprezzato e non ne avevamo alcuna stima." ... "Maltrattato, si lasciò umiliare e non aprì la sua bocca; era come agnello condotto al macello, come pecora muta di fronte ai suoi tosatori, e non aprì la sua bocca" |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2006
Città: Monza
Messaggi: 3686
|
Up per me !
Nessuno riesce a risolvere?
__________________
" Disprezzato e reietto dagli uomini, uomo dei dolori che ben conosce il patire, come uno davanti al quale ci si copre la faccia, era disprezzato e non ne avevamo alcuna stima." ... "Maltrattato, si lasciò umiliare e non aprì la sua bocca; era come agnello condotto al macello, come pecora muta di fronte ai suoi tosatori, e non aprì la sua bocca" |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Scusa ma la struct rec cd viene passata per copia alle funzioni che chiami dalla main()? Dovresti passare un puntatore, altrimenti come la modificano? Prova a stamparne i valori nella main() dopo averli letti, per verificare.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:10.