Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C++]Problemi istream

  1. #1

    [C++]Problemi istream

    codice:
     #include <iostream>
    #include <cstdio>
    #include <string>
    #include <sstream>
    #include <fstream>
    #define MAX_BUF 2048
    
    using namespace std;
    
    ostream& scrivi( ostream& , string );
    istream& leggi( istream& );
    
    int main()
    {   
        ifstream in;
        in.open("C:\\WINDOWS\\DirectX.txt");    
        ofstream out;
        out.open("C:\\WINDOWS\\DirectXOLD.txt");    
        cout << leggi(in);
        scrivi( out, "ciao"); 
        system( "PAUSE" );
        return 0;
    }
    
    ostream& scrivi( ostream& out, string mesg )
    {
        out << mesg << "\n";
        return out;
    }
    istream& leggi( istream& in)
    {
        string buf;
        in.get( buf, MAX_BUF );
        return in;
    }
    Mi da errore sul in.get
    Ma ifstream nn era una derivata di istream?


    Tnk 1k
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  2. #2
    codice:
    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <sstream>
    #include <fstream>
    
    using namespace std;
    
    ostream& scrivi( ostream& , string );
    string leggi( istream& );
    
    int main()
    {   
        ifstream in;
        in.open("C:\\errlgr.txt");    
        ofstream out;
        out.open("C:\\WINDOWS\\DirectXOLD.txt");    
        cout << leggi(in);
        cout << "\n";
        scrivi( out, "ciao"); 
        system( "PAUSE" );
        return 0;
    }
    
    ostream& scrivi( ostream& out, string mesg )
    {
        out << mesg << "\n";
        return out;
    }
    string leggi( istream& in)
    {
        string buf;
        in >> buf;
        return buf;
    }
    Risolto in parte...............ora mi da solo una colonna di qualsiarsi files
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    10
    mi sembra un problema simile al problema più comune coi puntatori.
    fai riferimento a delle variabile tramite i loro indirizzi, ma poi passi le variabili stessi anziché i loro indirizzi ai metodo che devono usare queste variabili.
    per esempio il modello del metodo leggi è:
    string leggi(istream &);

    mentre tu lo chiami nel modo seguente:
    cout << leggi(in);

    "in" è la variabile, non il suo indirizzo ("&in") e quindi usa il valore che trova nella variabile "in" come indirizzo della variabile.
    ma su quel indirizzo sicuramente il tuo programma non trova quello che tu cercavi....
    Non so quello che non so,
    se non so che cos'è che non so...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    x Leppie:
    stai ragionando da programmatore in C (dove il passaggio per riferimento non esiste), i riferimenti sono puntatori automaticamente deferenziati, percui la sintassi di Luc@s in quel contesto è esatta

    x Luc@s:
    nel tuo primo code, l'errore era nel primo parametro passato al metodo get, dall'header:
    istream& get (char* s, streamsize n );
    ovvero si aspetta un char* e non una string (lo so, sarebbe più comodo).

    nel tuo secondo code, usi l'operatore >> overloadato per le stringhe, e l'operazione dovrebbe dare come risultato che ti mette in buf la prima stringa che incontra (eliminando gli spazi che la precedono).

    Se il tuo scopo è copiare l'intero file su uno stream d'uscita, devi procedere diversamente, ad esempio ciclando fino alla fine del file d'ingresso con un getline (o senza ciclare), oppure passando per lo streambuffer.
    ciauz
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    10
    xStandard
    grazie per il chiaramento (sono nuovo anch'io in c/c++ e non conosco bene le librerie standard )
    Non so quello che non so,
    se non so che cos'è che non so...

  6. #6
    risolto:
    codice:
    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <sstream>
    #include <fstream>
    #define MAX_BUF 12000
    using namespace std;
    
    ostream& scrivi( ostream& , string );
    string leggi( istream& );
    
    int main()
    {   
        ifstream in;
        in.open( "C:\\io.txt" );    
        ofstream out;
        out.open( "C:\\DirectXOLD.txt" );    
        scrivi( out, leggi( in ) );
        cout << "\n"; 
        system( "PAUSE" );
        return 0;
    }
    
    ostream& scrivi( ostream& out, string mesg )
    {
        out << mesg;
        return out;
    }
    
    string leggi( istream& in)
    {
        string str;
        char buf[MAX_BUF+1];
        while(!in.eof())
        {
            in.read(buf, MAX_BUF);
            str.append(buf, in.gcount());
        }
        return str;
    }
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

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.