Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77

    [C++] Leggere Array di Strighe da File

    Ciao a tutti.
    Non riesco a stampare un'array di stringhe da file, in pratica ho scritto nel file di testo semplicemente tre righi di tre lettere l'una (es. asd,fgh.jkl) e dopo svariati tentativi riesco solo a stampare la prima riga ossia "asd".Il codice è questo ma credo ci manchi nel While un file.getline per poter stampare i righi successivi al primo,tuttavia ho provato a inserirlo ma non mi stampa niente.

    codice:
    #include <iostream>#include <fstream>
    #include <string.h>
    
    
    using namespace std;
    
    
    int main ()
    {
    	char vet[3];
    	
    	string s;
    	
    	ifstream file;
    	file.open ("dati.txt",ios::in);
    	if(!file)
    	{
    		cout << "errore apertura file";
    		return(1);
    	}
    	
    	int i=0;
    	while (!file.eof())
    	{
    		
    		file >> vet[i];
    		i++;
    		
    	}
    	
    	
    	for (int i=0;i<3;i++)
    	{
    		cout <<vet[i];
    	}
    	
    	file.close();
    	cout << "\n\n";
    	system("pause");
    
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    32
    Quote Originariamente inviata da Mrhide1 Visualizza il messaggio
    Ciao a tutti.
    Non riesco a stampare un'array di stringhe da file, in pratica ho scritto nel file di testo semplicemente tre righi di tre lettere l'una (es. asd,fgh.jkl) e dopo svariati tentativi riesco solo a stampare la prima riga ossia "asd".Il codice è questo ma credo ci manchi nel While un file.getline per poter stampare i righi successivi al primo,tuttavia ho provato a inserirlo ma non mi stampa niente.

    codice:
    #include <iostream>#include <fstream>
    #include <string.h>
    
    
    using namespace std;
    
    
    int main ()
    {
        char vet[3];
        
        string s;
        
        ifstream file;
        file.open ("dati.txt",ios::in);
        if(!file)
        {
            cout << "errore apertura file";
            return(1);
        }
        
        int i=0;
        while (!file.eof())
        {
            
            file >> vet[i];
            i++;
            
        }
        
        
        for (int i=0;i<3;i++)
        {
            cout <<vet[i];
        }
        
        file.close();
        cout << "\n\n";
        system("pause");
    
    }
    Sinceramente non so come sia definito il tipo predefinito string dalla libreria string.h ... io in genere attraverso il typedef dichiaro prima un vettore di caratteri e poi un vettore di stringhe :
    codice:
    #include <iostream>
    #include <fstream>
    #include <string.h>
    using namespace std;
    int main ()
    {   //Parte Dichiarativa
        typedef char VettoreCaratteri[256];
        typedef VettoreCaratteri VettoreStringhe[20];
        VettoreStringhe    s;
        int i=0;
        ifstream file;
        //Parte Esecutiva
        file.open ("dati.txt",ios::in);
        if(!file)
        {    
            cout << "errore apertura file";
            return(1);
        }
        while (!file.eof())
        {     file>>s[i];
              i++;
        }
        for (int i=0;i<3;i++)
        cout <<s[i]<<endl;
        file.close();
        cout << "\n\n";
        system("pause");
    }
    E funziona bene così, fammi sapere se è tutto chiaro o magari aspettiamo anche il parere dei piu' esperti , saluti
    Ultima modifica di Warioss; 28-12-2015 a 22:19

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Stai usando una sola stringa di 3 caratteri. Devi usare un array di char oppure utilizza le string del c++ con un vettore di 3 elementi.
    Del resto non si capisce a cosa ti serva s
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    Grazie Warioss ho capito come hai fatto,alla fine il problema era come dichiarare il vettore di stringhe poi l'importante è che funziona.Adesso provo a fare tutto il programma con l'allocazione dinamica,quindi penso che nel for al posto del 3 devo mettere strlen(s) così il for termina in base alla lunghezza delle varie stringhe,comunque se ho qualche altro problema chiedo xD

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    32
    Quote Originariamente inviata da Mrhide1 Visualizza il messaggio
    Grazie Warioss ho capito come hai fatto,alla fine il problema era come dichiarare il vettore di stringhe poi l'importante è che funziona.Adesso provo a fare tutto il programma con l'allocazione dinamica,quindi penso che nel for al posto del 3 devo mettere strlen(s) così il for termina in base alla lunghezza delle varie stringhe,comunque se ho qualche altro problema chiedo xD
    Mi fa davvero piacere essere stato utile anche io qualche volta , fino ad ora sono stato solo aiutato dai big del forum tra cui lo stesso oregon

    Comunque non ho capito bene se intendi che vuoi allocare dinamicamente il VettoreDiStringhe con la funzione new , così che lo spazio di allocazione dello stesso sia deciso run time e non a compiling time, oppure vuoi semplicemente calcolare in maniera automatica il riempimento del VettoreDiStringhe, in questo secondo caso basterebbe :
    codice:
    #include <iostream>#include <fstream>
    #include <string.h>
    using namespace std;
    int main ()
    {	//Parte Dichiarativa
    	typedef char VettoreCaratteri[256];
        typedef VettoreCaratteri VettoreStringhe[20];
        VettoreStringhe	s;
        int r=0; //Sarà il riempimento del tuo VettoreDiStringhe
        ifstream file;
        //Parte Esecutiva
        file.open ("dati.txt",ios::in);
        if(!file)
        {	
    		cout << "errore apertura file";
            return(1);
        }
    	while (!file.eof())
        	file>>s[r++];
        for (int i=0;i<r;i++)
        	cout <<s[i]<<endl;
    	file.close();
        cout << "\n\n";
        system("pause");
    }
    In questo modo r si aggiorna in base al numero di parole presenti nel documento di testo , e l'ultimo for scorre il vettore per tutto il suo riempimento stampando (una sotto l'altra perche' ho usato endl) le parole salvate nel VettoreDiStringhe.
    Pero' non sono sicuro di aver capito cosa volessi , ad ogni modo prova sempre prima tu da solo e nel caso facci sapere , ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    Quote Originariamente inviata da Warioss Visualizza il messaggio
    Mi fa davvero piacere essere stato utile anche io qualche volta , fino ad ora sono stato solo aiutato dai big del forum tra cui lo stesso oregon

    Comunque non ho capito bene se intendi che vuoi allocare dinamicamente il VettoreDiStringhe con la funzione new , così che lo spazio di allocazione dello stesso sia deciso run time e non a compiling time, oppure vuoi semplicemente calcolare in maniera automatica il riempimento del VettoreDiStringhe, in questo secondo caso basterebbe :
    codice:
    #include <iostream>#include <fstream>
    #include <string.h>
    using namespace std;
    int main ()
    {    //Parte Dichiarativa
        typedef char VettoreCaratteri[256];
        typedef VettoreCaratteri VettoreStringhe[20];
        VettoreStringhe    s;
        int r=0; //Sarà il riempimento del tuo VettoreDiStringhe
        ifstream file;
        //Parte Esecutiva
        file.open ("dati.txt",ios::in);
        if(!file)
        {    
            cout << "errore apertura file";
            return(1);
        }
        while (!file.eof())
            file>>s[r++];
        for (int i=0;i<r;i++)
            cout <<s[i]<<endl;
        file.close();
        cout << "\n\n";
        system("pause");
    }
    In questo modo r si aggiorna in base al numero di parole presenti nel documento di testo , e l'ultimo for scorre il vettore per tutto il suo riempimento stampando (una sotto l'altra perche' ho usato endl) le parole salvate nel VettoreDiStringhe.
    Pero' non sono sicuro di aver capito cosa volessi , ad ogni modo prova sempre prima tu da solo e nel caso facci sapere , ciao
    Esatto volevo usare NEW e in più voglio dividere il programma in funzioni(o moduli) anche se anche per questa cosa il Dev non collabora,perchè mi esce sempre l'errore could not convert :/

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.