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 ]