Ciao, sono nuovo del forum, non capisco proprio deove sia il problema in questi 3 programmi.
In partica è un'archivio di cd. Con il primo programma, carico i vari record, con il secondo li mostro e con il terzo li modifico aggiungo etc, etc..
Il problema è quando li devo mostrare, poichè sembra che mettendo feof() mi conta un record in più. Es: se ho inserito tre record, lui me ne mostra 4 copiando il 3 nel 4.
Ecco i tre programmi:
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; }Aggiungop anche il terzo anche se penso che il problema sia nei primi 2: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;!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; }
Grazie a tutti quelli che mi potranno aiutare, martedì ho il compito e non riesco a risolvere....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;!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;!feof(list);i++) { fread(&cd,sizeof(struct rec),1,list); if(strcmp(titolo,cd.titolo)==0) break; } fseek(list,i*sizeof(struct rec), SEEK_SET); 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; }

.
Rispondi quotando
