|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jul 2005
Città: Cagliari
Messaggi: 113
|
problema in C copia dati da file.txt
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? */ 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
__________________
quando tutti falliscono.. non provate a chiedere il mio parere! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 357
|
Codice:
while(!feof(fPtr)){
fscanf(fPtr, "%d %d %d %d", &base, &base, &base, &altezza);
if(altezza==base)
quadrato++;
else
rettangolo++;
}
printf("bla bla")
puoi usare eventualmente una variabile di comodo Ultima modifica di Andlea : 23-06-2006 alle 19:38. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jul 2005
Città: Cagliari
Messaggi: 113
|
non torna ancora, ho inserito i dati di 2 quadrati e mi dice che c'è 1 rettangolo e 0 quadrati
__________________
quando tutti falliscono.. non provate a chiedere il mio parere! |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 357
|
ella!
ho appena provato velocemente e funziona, posta tutto il codice |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jul 2005
Città: Cagliari
Messaggi: 113
|
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?
__________________
quando tutti falliscono.. non provate a chiedere il mio parere! |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 357
|
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 |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jul 2005
Città: Cagliari
Messaggi: 113
|
__________________
quando tutti falliscono.. non provate a chiedere il mio parere! Ultima modifica di biggestopolino : 24-06-2006 alle 14:46. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 357
|
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à |
|
|
|
|
|
#9 | ||
|
Member
Iscritto dal: Jul 2005
Città: Cagliari
Messaggi: 113
|
Quote:
nel codice il file viene chiuso tutte e due le volte (una nel main e l'altra nel void) Quote:
ho cmq postato il nuovo codice, ma da sempre lo stesso problema! http://www.guidascacchi.it/prova2.c
__________________
quando tutti falliscono.. non provate a chiedere il mio parere! |
||
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 357
|
Quote:
Dopo aver fatto questo: printf("I DATI SONO STATI INSERITI IN DATI.TXT\n\n"); devi aggiungere fclose(fPtr); |
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Jul 2005
Città: Cagliari
Messaggi: 113
|
risolto!
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 http://www.guidascacchi.it/prova3.c ti ringrazio x la pazienza
__________________
quando tutti falliscono.. non provate a chiedere il mio parere! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:27.



















