stgww
15-05-2008, 17:58
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:confused:
Ecco i programmi:
1)Carico il file#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;
}
2)Lo visualizzo e fino qui nessun problema#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;
}
3)Provo ad elaborarlo un po'#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;
}
Ecco provate a farli girare un secondo per capire cosa intendo. Poi un ultima cosa: come avete visto nell'ultima funzione aggiungo un record all'archivio, ma se a quel punto faccio ripartire il primo programma per caricare mi chiede solo tre recor e poi mi me ne mostra copiando il 3 nel 4, c'è modo di sviare l'inghippo?
Tha a lot
Ecco i programmi:
1)Carico il file#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;
}
2)Lo visualizzo e fino qui nessun problema#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;
}
3)Provo ad elaborarlo un po'#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;
}
Ecco provate a farli girare un secondo per capire cosa intendo. Poi un ultima cosa: come avete visto nell'ultima funzione aggiungo un record all'archivio, ma se a quel punto faccio ripartire il primo programma per caricare mi chiede solo tre recor e poi mi me ne mostra copiando il 3 nel 4, c'è modo di sviare l'inghippo?
Tha a lot