Connecting Tech Pros Worldwide Forums | Help | Site Map

reading a line from a file

Marc Schellens
Guest
 
Posts: n/a
#1: Jul 19 '05
The following routine ends up always the fail bit set.
I can extract from the same stream e.g. floats without a problem
(so it cannot be the stream)
Any obivious thing I missed?
Thanks,
marc


const string ReadLine(istream& is)
{
static stringstream ioss;
ioss.str("");

is.get( *ioss.rdbuf());

if ( (is.rdstate() & ifstream::failbit ) != 0 )
cout << "failbit\n";
if ( (is.rdstate() & ifstream::badbit ) != 0 )
cout << "badbit\n";
if ( (is.rdstate() & ifstream::eofbit ) != 0 )
cout << "eofbit\n";

if( !is.eof()) is.get(); // remove delimiter

cout << "Read line: " << ioss.str();

return ioss.str();
}


Victor Bazarov
Guest
 
Posts: n/a
#2: Jul 19 '05

re: reading a line from a file


"Marc Schellens" <m_schellens@hotmail.com> wrote...[color=blue]
> The following routine ends up always the fail bit set.
> I can extract from the same stream e.g. floats without a problem
> (so it cannot be the stream)
> Any obivious thing I missed?[/color]

You missed posting the code that calls this function. What do
you have in 'is' istream? If it's empty, then an attempt to read
past the end will set the fail-bit too.
[color=blue]
> Thanks,
> marc
>
>
> const string ReadLine(istream& is)
> {
> static stringstream ioss;
> ioss.str("");
>
> is.get( *ioss.rdbuf());
>
> if ( (is.rdstate() & ifstream::failbit ) != 0 )
> cout << "failbit\n";
> if ( (is.rdstate() & ifstream::badbit ) != 0 )
> cout << "badbit\n";
> if ( (is.rdstate() & ifstream::eofbit ) != 0 )
> cout << "eofbit\n";
>
> if( !is.eof()) is.get(); // remove delimiter
>
> cout << "Read line: " << ioss.str();
>
> return ioss.str();
> }
>[/color]


Closed Thread