Chiedo scusa per l' errore (scrivendo dal cellulare può accadere) e ringrazio MItaly per la correzione
Chiedo scusa per l' errore (scrivendo dal cellulare può accadere) e ringrazio MItaly per la correzione
Non esiste una funzione standard già fatta?
Se no, non posso leggere il file riga per riga e contare le letture? Come?
No, ma si può scrivere facilmente.Originariamente inviato da starcraftworld
Non esiste una funzione già pronta?
codice:unsigned int GetRowsNumber(FILE * fp) { unsigned int lines=0; int ch; rewind(fp); do { ch=fgetc(fp); if(ch=='\n') lines++; } while(ch!=EOF); return lines; }Complimenti per l'abilità di scrivere codice da cellulare, io non ci riuscirei mai!Originariamente inviato da KrOW
Chiedo scusa per l' errore (scrivendo dal cellulare può accadere) e ringrazio MItaly per la correzione![]()
Amaro C++, il gusto pieno dell'undefined behavior.
Infatti quando devo scrivere del codice più lungo di 6 o 7 righe, preferisco aspettare e inviarlo dal mio fedele amico PC![]()
Ti ho dato (e altri ti hanno dato) piu' volte suggerimenti sul metodo da seguire (fopen, fscanf, lettura in un ciclo tramite fino all'EOF) e anche del codice.Originariamente inviato da starcraftworld
Non esiste una funzione standard già fatta?
Ma chiedi ugualmente una funzione standard o codice pronto.
Quando comincerai a scrivere qualcosa di tuo utilizzando gli aiuti che hai avuto?
No MP tecnici (non rispondo nemmeno!), usa il forum.
Quando comincierai a leggere tutto il post prima di criticare?
Sto chiedendo se è possibile leggere il file per riga anzichè per carattere!
Tu pensa a leggere la mia prima risposta!!Originariamente inviato da starcraftworld
Quando comincierai a leggere tutto il post prima di criticare?
Sto chiedendo se è possibile leggere il file per riga anzichè per carattere!
No MP tecnici (non rispondo nemmeno!), usa il forum.
la fscanf legge una riga intera, non una parola alla volta!
Hai domandatoOriginariamente inviato da starcraftworld
la fscanf legge una riga intera, non una parola alla volta!
e quindi ti e' stato detto che puoi leggerli con una fscanf.Ho un file txt che in ogni riga ha due numeri separati da uno spazio.
Poi hai chiesto
e si presume (altrimenti dovresti aprire un altro thread, da regolamento) che parliamo SEMPRE dello stesso file con i due numeri per ogni riga.Come ottengo il numero di righe di un file?
Quindi la soluzione e' quella proposta ... in un ciclo in cui controlli l'EOF, leggi con la fscanf i due numeri e (come ti e' stato detto) aumenti un contatore. Alla fine avrai il numero delle righe (vedi risposta di KrOW).
Ora ti chiedo ... hai seguito i consigli e scritto del codice?
No MP tecnici (non rispondo nemmeno!), usa il forum.
FILE *file;
char nomeFile[50];
printf ("Inserire il nome del file di input: ");
scanf ("%s",nomeFile);
if ((file=fopen(nomeFile,"r"))==NULL) {
printf ("Errore: impossibile aprire il file %s",nomeFile);
getchar();
exit (1);
} /* if */
int lenght=0;
int c;
do {
c=fgetc (file);
if (c=='\n')
lenght++;
} while (c!=EOF); /* do-while */
int x[lenght], y[lenght];
int i=0;
for (i=0;i<lenght;i++) {
fscanf (file,"%d",&x[i]);
fscanf (file,"%d",&y[i]);
} /* for */
printf("%d",x[2]); /* <- riga che testa la corretta lettura */
fclose(file);
La riga che testa la corretta lettura dovrebbe ritornare 4 invece ritorna un numero molto lungo (circa 10 cifre) che non compare nel mio file.