Scrittura su file, NON SCRIVE !

di il
30 risposte

30 Risposte - Pagina 2

  • Re: Scrittura su file, NON SCRIVE !

    skynet ha scritto:


    std::vector<T> è una classe che utilizza l'allocazione dinamica e che cresce alla richiesta dell'utente. impara ad utilizzarlo. Nei miei esempi hai mai visto una allocazione fatto a mano? no perche il vector lo fa di nascosto e senza errori.

    http://www.cplusplus.com/reference/stl/vector

    grazie sky, ora però sto cercando di passare una variabile di tipo fstream in una funzione come devo fare?
    
    void leggiDaFile(vettore v,int &riemp){
    cout<<"Quanti nomi ci sono nel tuo file?";
    cin>>riemp;
    
    for (int i=0;i<riemp;i++){
    in>>v[i];
    cout<<v[i];
    }
    }
    
    
    
    dove "in" (5°rigo) è la variabile che nel main ho definito di tipo fstream, ma come gliela passo?
  • Re: Scrittura su file, NON SCRIVE !

    Come qualsiasi altra variabile
    
    void leggiDaFile(vettore v,int &riemp, fstream & in ){
    cout<<"Quanti nomi ci sono nel tuo file?";
    cin>>riemp;
    
    for (int i=0;i<riemp;i++){
    in>>v[i];
    cout<<v[i];
    }
    }
    
    
  • Re: Scrittura su file, NON SCRIVE !

    Non va, nell'header mi dice che fstream non è la definizione di un tipo, anche se do definito anche li la libreria
  • Re: Scrittura su file, NON SCRIVE !

    Posta il codice allora.
  • Re: Scrittura su file, NON SCRIVE !

    Ho risolto mettendo l'apertura del file e quindi la dichiarazione delle variabili nel sottoprogramma, ma non fa il suo dovere:

    MAIN
    using namespace std;
    
    int main (int argc, char * const argv[]) {
      
    	
    	
    	matrice m;
    	int r;
    	
    	vettore v;
    	int riemp;
    	
    	inserisciInMatrice( m,  r);
    	
    	leggiDaFile(v,riemp);
    	
    	
    	
    	
    
    	
        return 0;
    }
    

    Header
    
    #ifndef mamma
    #define mamma
    
    #define N 100
    #define R 20
    #include <fstream>
    
    
    
    
    typedef char nomi [R];
    
    typedef nomi matrice[N][N];
    
    typedef nomi vettore[N];
    
    void inserisciInMatrice(matrice & m,int & r);
    
    
    
    void leggiDaFile(vettore & v,int & riemp);
    
    
    
    
    #endif



    FUNZIONI
    
    #include "func.h"
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    
    void inserisciInMatrice(matrice & m,int & r){
    
    	cout<<"\nDefinisci la tua matrice :";
    	cout<<"\nQuante righe e colonne deve avere la tua matrice quadrata?";
    		cin>>r;
    	
    	cout<<"\nRiempi la matrice";
    		for(int i=0;i<r;i++){
    			for(int j=0;j<r;j++){
    				cout<<"\nInserisci un nome\n";
    				cin>>m[i][j];
    			}
    		}
    
    		// Stampa della matrice
    	for(int i=0;i<r;i++){
    		for(int j=0;j<r;j++){
    			
    			cout<<m[i][j]<<" ";}
    		cout <<endl;
    	}
    }
    
    
    
    
    
    [color=#FF0000]///////////////////////////////////////Questa è la funzione in questione//////////////////[/color]
    
    void leggiDaFile(vettore & v,int & riemp ){
    	
    	ifstream in;
    	
    	in.open("/Users/Genna/Desktop/fondamenti di informatica/algoritmi di base/prove d'esame/comparare a e o/preappello/nomi.txt",ios::in);
    	
    	cout<<"Quanti nomi ci sono nel tuo file?";
    	cin>>riemp;
    	
    	for (int i=0;i<riemp;i++){
    	 in>>v[i];
    		cout<<v[i];
    		
    		in.close();
    	}
    }
    		
    				 
    
  • Re: Scrittura su file, NON SCRIVE !

    Ops mi sono appena accorto che proprio qui su
    ho scritto questo :
      for (int i=0;i<riemp;i++){
        in>>v[i];
          cout<<v[i];
          
          in.close();<---------------------------------------------------------------
       }
    chiudevo nel ciclo
  • Re: Scrittura su file, NON SCRIVE !

    skynet ha scritto:


    std::vector<T> è una classe che utilizza l'allocazione dinamica e che cresce alla richiesta dell'utente. impara ad utilizzarlo. Nei miei esempi hai mai visto una allocazione fatto a mano? no perche il vector lo fa di nascosto e senza errori.

    http://www.cplusplus.com/reference/stl/vector

    ah! allora me la studio anche io mi servirà grazie!
  • Re: Scrittura su file, NON SCRIVE !

    Ma è possibile allocare in memoria in questo modo:

    "finchè non è finito il file inserisci nel vettore v"

    in pratica non conosciamo a priori il riempimento del vettore che deve essere pari alla lunghezza del file

    una cosa del genere:

    while(!miofile.eof())
    miofile>>v[?];

    come potrei scriverlo?
  • Re: Scrittura su file, NON SCRIVE !

    skynet ha scritto:


    Ma perche leggi carattere per carattere quando puoi leggere le stringhe in un colpo. L'operatore >> legge finché non trova uno spazio. Quindi invece di usare un vettore di caratteri usi, un vettore di stringhe. i < in.eof() non ha senso.puoi fare
    
    while(in.good())
    {
      in >> str; //dove str è di tipo stringa
      v.push_back(str); // dove v è del tipo vector<string>
    }
    
    per l'out puoi fare ancora meglio
    
    vector<string>::iterator it;
    for(it = v.begin(); it != v.end(); ++it)
        out << *it << " ";
    
    la stessa cosa ho fatto io sopra ma usando la funzione std::copy che mi permette di non usare i cicli.

    credo che ti abbia risposto qui xD anche se non ho ancora capito come funziona

    
    #include <vector>
    
      vector<string> v;
    string testo;
    
    while(in>>testo)
    {
        v.push_back (testo);
      }
    
    non sono per niente sicuro che funzioni xD
  • Re: Scrittura su file, NON SCRIVE !

    Invece funziona, provare per credere. Il vector gestisce la memoria da solo.
  • Re: Scrittura su file, NON SCRIVE !

    Non è possibile farlo in altri modi?

    sono sicuro che all'uni non abbiamo introdotto i vector, se non è possibile, in ogni caso mi spieghi cosa fa precisamente?
  • Re: Scrittura su file, NON SCRIVE !

    Voglia di leggere zero? ti ho messo il link sopra. diversamente devi imparare ad usare il new/new [] e delete/delete [] cioè l'allocazione dinamica della memoria. Vedi tu qual'è la via più corta.
  • Re: Scrittura su file, NON SCRIVE !

    Ecco, mi hai fatto ricordare che il prof utilizzava il new e il delete, mi potresti fare un ripasso rapido oppure consigliarmi dove li trovo in un manuale di c++, scusami se ti rubo tutto sto tempo, ma sono un nabetto che si sta avvicinando da meno di un mese al linguaggio, grazie ancora
  • Re: Scrittura su file, NON SCRIVE !

    Guarda un attimo quà:
  • Re: Scrittura su file, NON SCRIVE !

    skynet ha scritto:


    invece funziona, provare per credere. Il vector gestisce la memoria da solo.
    :) ho scritto che non pensavo funzionasse perchè l'ho scritto io senza guardare il tuo esempio

    ma... toglietemi una curiosita se faccio così non va?
    string conta;
    int i;
    fstream in;
    
    while (in>>conta)
    {
      i++;
    }
    
    in.close();
    
    string lettera[i];
    i=0;
    
    while (in>>lettera[i])
    {
      i++;
    }
    
    e poi il codice per controllare le occorrenze

    in questo modo non eviterebbe i vector e le allocazioni dinamiche? (anche se magari il mio codice non è proprio il più performante )
Devi accedere o registrarti per scrivere nel forum
30 risposte