Topic: Different behavior of ifstream and istrstream. What about istringstream?


Author: Alex Vinokur <alexander.vinokur@telrad.co.il>
Date: 1999/07/13
Raw View
Hi,

We have got different results using istrstream and ifstream.
(Please see below).

What about istringstream?
Note. <sstream> is missing on my compiler.

        Thanks in advance,
        Alex


//#########################################################
//------------------- C++ code : BEGIN -------------------
#include <iostream>
#include <fstream>
#include <string>
#include <strstream>
#include <assert.h>

int main ()
{
unsigned int    int_element = 7777;
istrstream      int_stream ("111 222 333");
ifstream        int_data_file ("int_data");
                assert (int_data_file);

char            chars_element[100];
istrstream      chars_stream ("AAA1 AAA2 AAA3");
ifstream        chars_data_file ("chars_data");
                assert (chars_data_file);

char            one_char_element = 'T';
istrstream      one_char_stream ("XYZ");
ifstream        one_char_data_file ("one_char_data");
                assert (one_char_data_file);

int i;

        //============== int_stream ==============
        i = 0;
        cout << endl;
        cout << endl;
        while ((int_stream >> int_element).good())
        {
                ++i;
                cout << "istrstream to int_element : Step#"
                     << i
                     << " : rdstate = "
                     << int_stream.rdstate ()
                     << endl;
        }
        cout << "istrstream to int_element : End   -> rdstate = "
             << int_stream.rdstate ()
             << endl;

        i = 0;
        cout << endl;
        while ((int_data_file >> int_element).good())
        {
                ++i;
                cout << "ifstream   to int_element : Step#"
                     << i
                     << " : rdstate = "
                     << int_data_file.rdstate ()
                     << endl;
        }
        cout << "ifstream   to int_element : End   -> rdstate = "
             << int_data_file.rdstate ()
             << endl;


        //============== chars_stream ==============
        i = 0;
        cout << endl;
        cout << endl;
        while ((chars_stream >> chars_element).good())
        {
                ++i;
                cout << "istrstream to chars_element : Step#"
                     << i
                     << " : rdstate = "
                     << chars_stream.rdstate ()
                     << endl;
        }
        cout << "istrstream to chars_element : End   -> rdstate = "
             << chars_stream.rdstate ()
             << endl;

        i = 0;
        cout << endl;
        while ((chars_data_file >> chars_element).good())
        {
                ++i;
                cout << "ifstream   to chars_element : Step#"
                     << i
                     << " : rdstate = "
                     << chars_data_file.rdstate ()
                     << endl;
        }
        cout << "ifstream   to chars_element : End   -> rdstate = "
             << chars_data_file.rdstate ()
             << endl;


        //============== one_char_stream ==============
        i = 0;
        cout << endl;
        cout << endl;
        while ((one_char_stream >> one_char_element).good())
        {
                ++i;
                cout << "istrstream to one_char_element : Step#"
                     << i
                     << " : rdstate = "
                     << one_char_stream.rdstate ()
                     << endl;
        }
        cout << "istrstream to one_char_element : End   -> rdstate = "
             << one_char_stream.rdstate ()
             << endl;

        i = 0;
        cout << endl;
        while ((one_char_data_file >> one_char_element).good())
        {
                ++i;
                cout << "ifstream   to one_char_element : Step#"
                     << i
                     << " : rdstate = "
                     << one_char_data_file.rdstate ()
                     << endl;
        }
        cout << "ifstream   to one_char_element : End   -> rdstate = "
             << one_char_data_file.rdstate ()
             << endl;

        //=================
        return 0;

}

//------------------- C++ code : END ----------------------



//#########################################################
//------------------- Data Files : BEGIN ------------------

# --- int_data file ---
111
222
333

# --- chars_data file ---
aaa1
aaa2
aaa3


# --- one_char_data file ---
xyz


//------------------- Data Files : END --------------------



//#########################################################
//------------------- Running Results : BEGIN -------------


istrstream to int_element : Step#1 : rdstate = 0
istrstream to int_element : Step#2 : rdstate = 0
istrstream to int_element : Step#3 : rdstate = 0
istrstream to int_element : End   -> rdstate = 3

ifstream   to int_element : Step#1 : rdstate = 0
ifstream   to int_element : Step#2 : rdstate = 0
ifstream   to int_element : Step#3 : rdstate = 0
ifstream   to int_element : End   -> rdstate = 3


istrstream to chars_element : Step#1 : rdstate = 0
istrstream to chars_element : Step#2 : rdstate = 0
istrstream to chars_element : End   -> rdstate = 1
                                // ATTENTION: end rdstate = 1
                                // ATTENTION: only two steps

ifstream   to chars_element : Step#1 : rdstate = 0
ifstream   to chars_element : Step#2 : rdstate = 0
ifstream   to chars_element : Step#3 : rdstate = 0
ifstream   to chars_element : End   -> rdstate = 3


istrstream to one_char_element : Step#1 : rdstate = 0
istrstream to one_char_element : Step#2 : rdstate = 0
istrstream to one_char_element : Step#3 : rdstate = 0
istrstream to one_char_element : End   -> rdstate = 3

ifstream   to one_char_element : Step#1 : rdstate = 0
ifstream   to one_char_element : Step#2 : rdstate = 0
ifstream   to one_char_element : Step#3 : rdstate = 0
ifstream   to one_char_element : End   -> rdstate = 3


//------------------- Running Results : END ---------------



//#########################################################
//------------------- Compiler & System  ------------------

g++ -v     : gcc version egcs-2.91.57 19980901
             (egcs-1.1 release)

uname -a   : SunOS <nodename> 5.6 Generic_105181-09
             sun4m sparc SUNW,SPARCstation-5

//---------------------------------------------------------

//#########################################################



Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.
---
[ comp.std.c++ is moderated.  To submit articles, try just posting with ]
[ your news-reader.  If that fails, use mailto:std-c++@ncar.ucar.edu    ]
[              --- Please see the FAQ before posting. ---               ]
[ FAQ: http://reality.sgi.com/austern_mti/std-c++/faq.html              ]