View Full Version : problema in C copia dati da file.txt
biggestopolino
23-06-2006, 18:03
ho un file chiamato dati.txt dove sono presenti diverse righe, es:
5 4 3 2
6 7 2 2
9 5 3 4
dove i primi 2 valori rappresentano le coordinate dell'origine (x,y) mentre le altre 2 rappresentano la base e l'altezza.
quindi nel primo caso e nel terzo avremo un rettangolo, nel secondo un quadrato.
il void che ho creato e':
void leggi(int n){ /*n sono il numero di righe da leggere*/
int contatore=0;
int rettangolo=0,quadrato=0;
int base,altezza;
FILE *fPtr;
fPtr=fopen("dati.txt","r");
if(fPtr!=NULL){
for(contatore=0;contatore<n;contatore++){
/* qua cosa devo inserire affinchè mi inserisca nella variabile base e altezza i valori? */ :confused:
if(base==altezza){
quadrato++;
}
else if(base!=altezza){
rettangolo++;
}
}
printf("I rettangoli sono %d e i quadrati sono %d\n",rettangolo, quadrato);
}
else printf("non e' stato possibile accedere al file\n");
fclose(fPtr);
}
grazie in anticipo
while(!feof(fPtr)){
fscanf(fPtr, "%d %d %d %d", &base, &base, &base, &altezza);
if(altezza==base)
quadrato++;
else
rettangolo++;
}
printf("bla bla")
la base viene scritta tre volte, rimane solo l'ultimo valore, quello giusto
puoi usare eventualmente una variabile di comodo
biggestopolino
23-06-2006, 19:06
non torna ancora, ho inserito i dati di 2 quadrati e mi dice che c'è 1 rettangolo e 0 quadrati :mbe:
ella!
ho appena provato velocemente e funziona, posta tutto il codice
biggestopolino
24-06-2006, 00:29
salto la parte della creazione del file perchè il file viene creato e con i parametri giusti.
nel main quindi c'è:
printf("seleziona quante righe dovro' esaminare\n");
scanf("%d",&quantita2);
if(quantita2<=quantita){
leggirettangoli(quantita2);
}
dove con quantità avevo indicato in precedenza il numero di figure da inserire nel file (quindi nell'esempio a inizio pagina quantità=3).
quantità2 sono invece le righe da esaminare.
la funzione completa invece è questa:
void leggirettangoli(int n){
int contatore=0;
int rettangolo=0,quadrato=0;
int base,altezza,x,y;
FILE *fPtr;
fPtr=fopen("dati.txt","r");
if(fPtr!=NULL){
for(contatore=0;contatore<n;contatore++){
while(!feof(fPtr)){
fscanf(fPtr, "%d %d %d %d", &x, &y, &base, &altezza);
if(altezza==base) {
quadrato++;}
else{
rettangolo++;
}}
}
printf("I rettangoli sono %d e i quadrati sono %d\n",rettangolo, quadrato);
}
else printf("non e' stato possibile accedere al file\n");
fclose(fPtr);
}
c'è qualche errore? :confused:
O fai il for, o fai il while
Con il while che ho messo conti fino alla fine del file, perchè pensavo dovessi leggerlo tutto
Se devi contare solo n righe allora fai solo il for
biggestopolino
24-06-2006, 09:49
lo sto postando qui
http://www.guidascacchi.it/prova.c
cosa c'è di errore?
Prima di tutto, quando scrivi sul file ti dimentichi di chiuderlo alla fine, quindi non viene scritto nulla(almeno compilando con vc)
Il file va SEMPRE chiuso
Dopo aver inserito tutti i record fai quindi una fclose.
Secondo errore, quando estrai i dati dopo lo fscanf fai un improbabile fPtr++
Non ha molto significato, anche perchè quando fai fscanf l'io pointer viene aggiornato al carattere successivo all'ultimo letto.
Quinti togli quel fPtr++ e aggiungi il file close dopo la scrittura e funzionerà
biggestopolino
25-06-2006, 03:52
Prima di tutto, quando scrivi sul file ti dimentichi di chiuderlo alla fine, quindi non viene scritto nulla(almeno compilando con vc)
Il file va SEMPRE chiuso
nel codice il file viene chiuso tutte e due le volte (una nel main e l'altra nel void)
Secondo errore, quando estrai i dati dopo lo fscanf fai un improbabile fPtr++
questo invece era un errore che non so nemmeno io perchè l'ho scritto :confused:
ho cmq postato il nuovo codice, ma da sempre lo stesso problema! :doh:
http://www.guidascacchi.it/prova2.c
nel codice il file viene chiuso tutte e due le volte (una nel main e l'altra nel void)
Nel main chiudi il file solo se è null.
Dopo aver fatto questo:
printf("I DATI SONO STATI INSERITI IN DATI.TXT\n\n");
devi aggiungere fclose(fPtr);
biggestopolino
25-06-2006, 12:51
porca miseria non me n'ero accordo di non averlo chiuso quello..
ora funziona perfettamente, ho cancellato i 2 file .c precedenti e ora sta qui il file giusto :p
http://www.guidascacchi.it/prova3.c
ti ringrazio x la pazienza :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.