|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
[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;
}
Ma ifstream nn era una derivata di istream? Tnk 1k |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
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;
}
Ultima modifica di Kleidemos : 10-09-2003 alle 15:45. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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 ); Ultima modifica di cionci : 10-09-2003 alle 16:04. |
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
ora mi legge una solo riga
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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... |
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
tipo un :
Codice:
while( in )
{
char buf[MAX_BUF+1];
in.getline( buf, MAX_BUF );
return buf;
}
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
No...così legge sempre e solo una volta e poi ritorna (il return esce dalla funzione)...
Codice:
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;
}
|
|
|
|
|
|
#8 |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
come funziona str.append(buf, in.gcount()); ?? appende a buf il prossimo carattere letto da in?
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:10.


















