|
|||||||
|
|
|
![]() |
|
|
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 20: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: 15:32.




















