Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    165

    [C-C++] Lettura file testo di interi

    Salve, stavo tentando di fare un programmino che leggesse un file di interi strutturato in questo modo:
    codice:
    3,5
    1 1 1 , 2 2 2 , 3 3 3 , 4 4 4 , 5 5 5
    11 11 11 , 22 22 22 , 33 33 33 , 44 44 44 , 55 55 55
    111 111 111 , 222 222 222 , 333 333 333 , 444 444 444 , 555 555 555
    
    3,7
    1 1 1 , 2 2 2 , 3 3 3 , 4 4 4 , 5 5 5 , 6 6 6 , 7 7 7
    11 11 11 , 22 22 22 , 33 33 33 , 44 44 44 , 55 55 55 , 66 66 66 , 77 77 77
    111 111 111 , 222 222 222 , 333 333 333 , 444 444 444 , 555 555 555 , 665 665 665 , 777 777 777
    
    ....
    quindi il file contiene delle matrici di interi (anche negativi) dove la prima riga contiene la dimensione della prima matrice e poi la matrice stessa, dove ogni elemento della matrice è costituito da tre numeri;

    Ho iniziato a fare un programmino ma ho trovato un problema,
    una volta letti i valori di numero di righe e colonne vorrei scorrere la matrice fino alla fine della riga (\n)

    Quindi faccio così:

    codice:
    while (vir!='\n') {
    fscanf(myfile,"%d %d %d %c",&xx,&yy,&zz,&vir);
    ...
    Con questo prendo gli elementi a tre a tre e anche la virgola che separa i gruppi di elementi, va bene per tutti i gruppi della matrice tranne l'ultimo! Ad esempio una volta attraversata tutta la prima riga il valore che mi torna la fscanf è il seguente:
    "5 5 5 1" dove l'uno è il primo carattere della riga successiva! Perchè non mi trova lo '\n'?? Nel file c'è l'acapo!

    Aiutatemi grazie!

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Meglio se posti il codice completo.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    165
    Originariamente inviato da ramy89
    Meglio se posti il codice completo.
    si, comunque girando un pò per il web ho scoperto che la fscanf non rileva il carattere speciale '\n', sto prendendo un'altra strada non molto pulita. Ho fatto progressi, nel caso in cui dovessi riuscirci posto tutto il codice e magari vediamo di pulirlo! Grazie comunque!

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    165
    Questo è il codice funzionante...

    codice:
    int main () {
    	int xx, yy ,zz;
    	int righe, colonne, count_col, count_matrix;
    	char vir,c;
    
    	count_matrix=2;
    	 FILE * myfile;
    	  myfile = fopen ("esempio.txt","r");
    
    	  c=' ';//inizializzo
    	  while (count_matrix!=0) //conta il numero di matrici che conosco a priori NON RIESCO A TROVARE L'EOF
        		{
        		count_matrix--;
    		  fscanf(myfile,"%d",&righe);
        		fscanf(myfile,"%c",&vir);
        		fscanf(myfile,"%d",&colonne);
        		c= fgetc(myfile); // '\n'
        		cout << righe << " ++ "<< vir << " ++ "<< colonne << endl;
    
        		while (righe!=0) {
        			count_col=colonne;
    
        			while (count_col!=0) {
        				count_col--;
        				fscanf(myfile,"%d %d %d",&xx,&yy,&zz);
        				if (count_col==0) { // leggo lo '\n'
        					c= fgetc(myfile); 
        					c=' ';}
        				else { //la riga non è ancora finita e leggo ", "
        					c= fgetc(myfile);// ','
        					c= fgetc(myfile);// ' '
        					}
        				cout << count_col << endl;
        				cout << xx << " "<< yy << " "<< zz << " "<< endl;
        			}//  fine colonne
    
        		righe--;
        		cout << "righe" << righe << endl;
        		//scanf("%c",&invio);
        		}//righe
    
        }//count_matrix==0;
        cout << "chiudo"  << endl;
        fclose (myfile);
    
      return 0;
    }
    se non utilizzo il count_matrix continua a leggere dei valori strani e poi si ferma!
    Possiamo vedere di pulirlo un pò e semmai utilizzare anche l'EOF? Grazie per l'aiuto!... comunque così funziona!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.