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;
}
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;
}
Aggiungop anche il terzo anche se penso che il problema sia nei primi 2:
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;
}
Grazie a tutti quelli che mi potranno aiutare, martedì ho il compito e non riesco a risolvere....