Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    32

    [C++]Apertura file di testo

    Volevo porre alla vostra attenzione due quesiti sull'argomento "Apertura File di Testo in C + + " (da notare, ma credo sia evidente , che sono alle primissime armi )

    PRIMO QUESITO:

    Quello che devo fare e' aprire due file di testo semplicemente passando come parametro il loro nome , ed ho provato a fare così :

    Main
    codice:
    #include <iostream>
    #include "StarWars.h"
    using namespace std;
    int main(int argc, char** argv) {
        //Parte Dichiarativa
        vettore latoscuro,latochiaro;
        stringa s1,s2;
        int r1,r2;
        //Parte Esecutiva
        LeggiFile("latoscuro.txt",s1,r1);
        cout<<"Contenuto latoscuro:\n";
        StampaStringa(s1,r1);
        LeggiFile("latochiaro.txt",s2,r2);
        cout<<"Contenuto latochiaro:\n";
        StampaStringa(s2,r2);
        return 0;
    }
    Body
    codice:
    #include <iostream>
    #include "StarWars.h"
    using namespace std;
    
    
    void LeggiFile(vettore FileName,stringa s,int& r){
    	fstream f;
    	f.open(FileName,ios::in);
    	if (!f)
    		cout<<"Access Denied\n";
    	else
    		while(!f.eof())
    			f>>s[r++];
    	f.close();
    }
    
    
    void StampaStringa(stringa s,int r){
        for(int i=0;i<r;i++)
            cout<<s[i]<<endl;
        cout<<endl;
    }


    Prototipo
    codice:
    #include <string.h>
    #include <fstream>
    #define N 100
    typedef char vettore[256];
    typedef vettore stringa[N];
    
    
    void LeggiFile(vettore,stringa,int&);
    void StampaStringa(stringa,int);


    Ma il
    risultato e' alquanto bizzarro : in pratica funziona solo se apro uno solo dei due file di testo, in caso contrario si arresta in maniera anomala, come testimoniato qui: https://www.sendspace.com/file/2lk9ts


    SECONDO QUESITO:
    Se volessi fare un solo sottoprogramma che fa decidere di volta in volta all'utente da tastiera il nome del file testo da aprire , si potrebbe fare? (immagino di sì ) e se sì , come?



    Grazie in anticipo a TUTTI
    Ultima modifica di Warioss; 23-12-2015 a 13:25

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Per la prima questione, devi azzerare r1 e r2 prima di usarle.

    Per la seconda domanda, ovviamente si può fare ma non capisco quale difficoltà hai a farlo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    32
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Per la prima questione, devi azzerare r1 e r2 prima di usarle.

    Per la seconda domanda, ovviamente si può fare ma non capisco quale difficoltà hai a farlo.
    Grazie mille per l'interessamento

    Per il primo quesito:

    Wow... ahahah non credevo fosse questo tutto il problema!.
    In effetti se non inizializzo a 0 r1 ed r2 lui può avere valori di r1 ed r2 già molto alti in memoria e giustamente dopo sfora le dimensioni massime, credo sia stato questo il misfatto.

    Ora funziona alla grande anche se visualizzo un errore strano nel log di compilazione che ,pero' ,non ha grande importanza perché compila ed esegue comunque alla grande.
    L'errore e' il seguente: http://i68.tinypic.com/32zommb.png
    Giusto per curiosita' , perchè da questo errore? E si potrebbe risolvere?

    Per il secondo quesito:

    Ok ora sono riuscito a fare anche questo.
    Per farlo ho fatto così:

    Main:
    codice:
    #include <iostream>
    #include "StarWars.h"
    using namespace std;
    int main(int argc, char** argv) {
        //Parte Dichiarativa
        stringa s1,s2;
        int r1=0,r2=0;
        //Parte Esecutiva
        LeggiFile(s1,r1);
        cout<<"Contenuto latoscuro:\n";
        StampaStringa(s1,r1);
        LeggiFile(s2,r2);
        cout<<"Contenuto latochiaro:\n";
        StampaStringa(s2,r2);
        return 0;
    }

    Body:

    codice:
    #include <string.h>
    #include <fstream>
    #define N 100
    typedef char vettore[256];
    typedef vettore stringa[N];
    
    
    void LeggiFile(stringa,int&);
    void StampaStringa(stringa,int);
    Prototipo:
    codice:
    #include <iostream>
    #include "StarWars.h"
    using namespace std;
    
    
    void LeggiFile(stringa s,int& r){
        vettore FileName;
        fstream f;
        cout<<"Inserire il nome del file da aprire\n";
        cin>>FileName;
        f.open(FileName,ios::in);
        if (!f)
            cout<<"Permission Denied\n";
        else
            while(!f.eof())
                f>>s[r++];
        f.close();
    }
    
    
    void StampaStringa(stringa s,int r){
        for(int i=0;i<r;i++)
            cout<<s[i]<<endl;
        cout<<endl;
    }
    E funziona benissimo.

    Piccola Curiosità
    ... quando nell'esecuzione digito il nome ovviamente funziona solo se gli specifico l'estensione alla fine, tipo : "latoscuro.txt" , se scrivo solo "latoscuro" non se lo prende.

    Allora ho provato a modificare solo
    codice:
    f.open(FileName,ios::in);
    in
    codice:
    f.open("FileName.txt",ios::in);
    ma così non funziona mai, qualsiasi nome gli metto mi dice sempre "Permission Denied" ... quindi se volessi scrivere il nome del file a meno dell'estensione ci sarebbe qualche trucchetto da usare?

    P.S.: E' solo una curiosità , anche inserendo l'estensione con l'algoritmo che ho usato sopra va piu' che bene
    Ultima modifica di Warioss; 23-12-2015 a 20:38

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non vedo messaggi d'errore o warning e quello che mostri è l'esecuzione del programma non la compilazione.

    Per il nome, non è questione di "trucchetti" ma di sapere come unire il contenuto della variabile ad una stringa costante. Studia la funzione strcat per unire la variabile FileName e la stringa ".txt"
    Nota che per la variabile non ho usato le virgolette mentre per la stringa dell'estensione sì.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    32
    •Per la prima : Ok allora quel " [Warning] deprecated conversion from string constant to 'char*' presente in foto ( http://oi68.tinypic.com/32zommb.jpg ) e' normale? Se sì chiudiamo la numero 1

    •Per la seconda : Ok questa la possiamo reputare chiusa Grande quella funzione strcat , ho fatto così:
    codice:
    void LeggiFile(stringa s,int& r){    
        vettore FileName;
        fstream f;
        cout<<"Inserire il nome del file da aprire\n";
        cin>>FileName;
        strcat(FileName,".txt");
        f.open(FileName,ios::in);
    E Va benissimo ora , senza dover specificare l'estensione di volta in volta

    P.S.: Grazie mille per l'aiuto
    Ultima modifica di Warioss; 28-12-2015 a 15:12

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 © 2025 vBulletin Solutions, Inc. All rights reserved.