[C++] Lettura stringa da file

di il
8 risposte

[C++] Lettura stringa da file

Ciao a tutti, prima nel mio programma leggevo da file una stringa in questo modo:
FILE *fp;
char stringalett[100];
fgets (strigalett, 100, fp);

volevo convertirlo con le stringhe c++, quindi facendo:
FILE *fp;
string stringalett;

qui mi fermo, perché con la fgets non riesco e con la getline mi da un errore tipo: no istance of overloaded funcion

8 Risposte

  • Re: [C++] Lettura stringa da file

    La fgets è una funzione del c.
    dovresti utilizzare una getline con fp come istanza, ma non penso te lo accetti poiché la struct FILE fa parte del c.
    prova con un'istanza di ifstream.
  • Re: [C++] Lettura stringa da file

    Solo a fini didattici ti dico che la classe STL string C++ (ammesso che fosse quello che intendevi con il nome di tipo "stringa") ha un metodo che ti consente di "estrarre" la stringa C grezza dal container string, ma un approccio del genere, finalizzato al solo uso di API C per la gestione delle stringhe o dei file, è del tutto inutile e poco ortodosso (o programmi in C o in C++, per quanto siano tecnicamente possibili commistioni dei due linguaggi).
    Ti consiglio dunque anche io di dare un'occhiata alle classi per i file stream specifici del linguaggio C++, che ti offrono tra le altre cose un'interfaccia anche più completa ed evoluta degli omologhi stream C-like.
  • Re: [C++] Lettura stringa da file

    Con c_str estrai la stringa, non ci scrivi dentro. La via corretta è usare con la classe string opportuni metodi di I/O del C++.
  • Re: [C++] Lettura stringa da file

  • Re: [C++] Lettura stringa da file

    scissors61 ha scritto:


    Solo a fini didattici ti dico che la classe STL string C++ (ammesso che fosse quello che intendevi con il nome di tipo "stringa") ha un metodo che ti consente di "estrarre" la stringa C grezza dal container string, ma un approccio del genere, finalizzato al solo uso di API C per la gestione delle stringhe o dei file, è del tutto inutile e poco ortodosso (o programmi in C o in C++, per quanto siano tecnicamente possibili commistioni dei due linguaggi).
    Ti consiglio dunque anche io di dare un'occhiata alle classi per i file stream specifici del linguaggio C++, che ti offrono tra le altre cose un'interfaccia anche più completa ed evoluta degli omologhi stream C-like.
    si intendevo string, mi è scappata una "a", comunque ho riscritto il codice provando ad utilizzare gli stream c++
  • Re: [C++] Lettura stringa da file

    Ho un nuovo errore: praticamente, nel mio programma utilizzo un menù switch-case del genere:
    
    switch (scelta)
    {
    case 1:
    	programma.apri_file();
    	ifstream fdc(NomeFileDc);
    	if (fdc.good())
    		{...}
    }
    
    metodo apri_file()
    
    	cout << endl << "come si chiama il file? aggiungi il .txt alla fine: ";
    	cin >> NomeFileDc;
    	cin.ignore();
    
    ho questo errore: error C2360: initialization of 'fdc' is skipped by 'case' label

    Prima con gli stream del C dichiaravo globalmente FILE * fdc; dentro il metodo apri_file avevo fdc = fopen(NomeFileDc, "r"); e nel main chiamavo direttamente in sto modo senza aggiungere nulla programma.apri_file(); (funzionava), adesso ho rimosso questa istruzione: FILE *fdc; e non so come risolvere.
  • Re: [C++] Lettura stringa da file

    Puoi fare così:
    
    switch (scelta)
    {
    case 1:
        { // apre uno scope  
           programma.apri_file();
           ifstream fdc(NomeFileDc);
           if (fdc.good())
               {...}
       } // chiude lo scope
    }
    
  • Re: [C++] Lettura stringa da file

    shodan ha scritto:


    Puoi fare così:
    
    switch (scelta)
    {
    case 1:
        { // apre uno scope  
           programma.apri_file();
           ifstream fdc(NomeFileDc);
           if (fdc.good())
               {...}
       } // chiude lo scope
    }
    
    funziona, grazie mille.
Devi accedere o registrarti per scrivere nel forum
8 risposte