Newsgroup: it.comp.lang.c++
Titolo: Problema con lettura dati

Voglio leggere una determinata stringa che ho precedentemente salvato e
leggerla fino ad un carattere stabilito( %end ).
Ho provato cosi:
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
    return 0;
}
void scrivi(string nome, string text)
{
    string cosa;
    stringstream temp_write;
    ofstream out(nome.c_str());
    temp_write << text;
    text = temp_write.str();
    out << text << "%end" << text;
    out.close();
}
string leggi(string nome)
{
    string cosa;
    stringstream temp_read;
    ifstream in(nome.c_str());
    while(in.get() != "%end")
    {
        temp_read << in.put();
    }
    cosa = temp_read.str();
    return cosa;
}
Ma mi da
C:/Documents and Settings/Admin/Desktop/Test.cpp:29: ISO C++ forbids
comparison
   between pointer and integer
C:/Documents and Settings/Admin/Desktop/Test.cpp:31: no matching function
for
   call to `std::basic_ifstream<char, std::char_traits<char> >::put()'
Esecuzione terminata
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
Ciao da Kleidemos
C++ Programmer
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.

Ho provato cosi:
#include <iostream>
#include <cstdio>
#include <sstream>
#include <fstream>
#include <string>
using namespace std;
void scrivi(string, string);
string leggi(string);
int main()
{
    int sc;
    string test = "this.txt", txt = "ioioio";
    scrivi(test, txt);
    cin >> sc;
    if(sc == 1)
    {
    cout << leggi(test) << endl;
    }
    system("PAUSE");
    return 0;
}
void scrivi(string nome, string text)
{
    stringstream temp_write;
    ofstream out(nome.c_str());
    temp_write << text;
    text = temp_write.str();
    out << text << "%end%" << "ciao";
    out.close();
}
string leggi(string nome)
{
    string out, tmp, temp_read;
    bool trovato = false;
    ifstream in(nome.c_str());
        while (in.good())
        {
            temp_read = in.get();
        }
        while(temp_read != "\0")
        {
            if(temp_read == "%end%")
            {
                out = temp_read;
                trovato = true;
            }
            if(trovato)
                continue;
        }
    in.close();
    return out.c_str();
}
Ma la console rimani vuota:(
--


     return out.c_str();
Perche' passare attraverso c_str()?
Versione semplice che legge una sola riga e non controlla gli errori. 
Se la stringa puo` contenere piu` righe si puo` fare un ciclo che
legge una riga alla volta e la aggiunge in fondo alla stringa.
string leggi( const string & nome )
{
  ifstream in( nome.c_str() );
  string text;
  getline( in, text );
  string::size_type pos = text.find( "%end%" );
  if (pos != string::npos)
    text.erase( pos );
  return text;
}
        Mauro

#include <iostream>
#include <cstdio>
#include <sstream>
#include <fstream>
#include <string>
using namespace std;
void scrivi(string, string);
string leggi(string);
int main()
{
    int sc;
    string test = "this.txt", txt = "ioioio";
    scrivi(test, txt);
    cin >> sc;
    if(sc == 1)
    {
    cout << leggi(test) << endl;
    }
    system("PAUSE");
    return 0;
}
void scrivi(string nome, string text)
{
    stringstream temp_write;
    ofstream out(nome.c_str());
    temp_write << text;
    text = temp_write.str();
    out << text << "%end%" << "ciao";
    out.close();
}
string leggi(string nome)
{
    string out, temp_read;
    bool trovato = false;
    ifstream in(nome.c_str());
        while (in)
        {
            temp_read = in.get();
        }
        out = temp_read.substr( 0, temp_read.find( "%end" ) );
    in.close();
    return out.c_str();
}
Ho provato cosi ................ma sempre nulla  mi da