PDA

View Full Version : [C++]Problemi istream


Kleidemos
10-09-2003, 14:30
#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:cry: :cry:
Ma ifstream nn era una derivata di istream?


Tnk 1k

Kleidemos
10-09-2003, 14:35
#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( e sola riga ) di qualsiarsi files:(

cionci
10-09-2003, 15:00
in.get( buf, MAX_BUF );

L'errore č che non puoi mettere una string come primo parametro...

Ad esempio andrebbe bene:

char buf[MAX_BUF+1];

in.getline( buf, MAX_BUF );

Kleidemos
10-09-2003, 15:13
ora mi legge una solo riga:(

cionci
10-09-2003, 15:19
Ah...volevi leggerle tutte ? Ma come fai a leggerle tutte ? E se la dimensione č superiore a 2048 ?

Se vuoi rimettere get allora devi fare un ciclo da qualche parte...

Kleidemos
10-09-2003, 15:26
tipo un :


while( in )
{
char buf[MAX_BUF+1];
in.getline( buf, MAX_BUF );
return buf;
}


Cosi?

cionci
10-09-2003, 17:05
No...cosė legge sempre e solo una volta e poi ritorna (il return esce dalla funzione)...


string leggi( istream& in)
{
string str;
while(!in.eof())
{
char buf[MAX_BUF+1];
in.read(buf, MAX_BUF);
str.append(buf, in.gcount());
}
return str;
}

Kleidemos
10-09-2003, 17:27
come funziona str.append(buf, in.gcount()); ?? appende a buf il prossimo carattere letto da in?

cionci
10-09-2003, 17:30
in.read legge al massimo MAX_BUF caratteri...
in.gcount() contiene il numero di caratteri estratti dall'ultima operazione di lettura...

str.append(buf, in.gcount()); prende i primi in.gcount caratteri da buf (in pratica gli ultimi caratteri letti) e li aggiunge alla fine della stringa str...