Fscanf - come capire fine riga file?

di il
2 risposte

Fscanf - come capire fine riga file?

Ho un file testo cosi (prime due righe per esempio)

01 12.3 22 23 1
02 7 33.5 66 21.45 10 11 12 44

Quindi piu righe, ognuna con vari numeri (non so quanti) a priori (qui ad esempio sono 5 nella prima riga e 9 nella seconda)
Io vorrei memorizzare ogni riga in una matrice
V[righe][colonne]
//Quindi ad esempio 
V[0][] sarà {1, 12.3, 22, 23, 1}
V[1][] sarà {2, 7, 33.5, 66, 21.45, 10, 11, 12, 44}
Vorrei usare fscanf, ma come faccio a sapere quando è terminata una riga per incrementare il primo indice della matrice?

Grazie

2 Risposte

  • Re: Fscanf - come capire fine riga file?

    Nella fscanf puoi ricorrere agli specificatori [] (Scanset) o [^] (Negated scanset), ad esempio: "%[^\n]", oppure puoi utilizzare la fgetc dopo ogni chiamata della fscanf, ad esempio all'interno di un ciclo while, per riconoscere il carattere di fine linea.
  • Re: Fscanf - come capire fine riga file?

    Ho usato "fgetc" per trovare gli spazi che ci sono tra un numero e un altro.
    Posto nel caso serva a qualcuno:
    
    int main ()
    {
        FILE *pf = Aprifile ("testo.txt", 0);   //funzioncina che apre il file in lettura
        static float M[20][20];
        int j = 0, i = 0;		                // primo e secondo indice della matrice
     
        for (j = 0; !feof (pf) && j < 20; j++)
        {
            fscanf (pf, "%f", &M[j][i]);	// leggo il primo valore e lo memorizzo nell'array 
            for (i = 1; fgetc (pf) == ' '; i++)
    	    /* se leggo uno spazio, il prossimo testo sara'  sicuro uno dei valori
    	    se invece non c'e' uno spazio, vuol dire che e' terminata la riga 
    	    ed esco dal ciclo for  e ritorno al primo for*/
    	
    	        fscanf (pf, "%f", &M[j][i]);	// leggo tale valore e lo memorizzo nell'array 
    
            printf ("\n gli elementi nell'indice %d sono %d", j, i);	
        }
        return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
2 risposte