Forums
New posts
Search forums
Members
Current visitors
Log in
Register
What's new
Search
Search
Search titles only
By:
New posts
Search forums
Menu
Log in
Register
Install the app
Install
Forums
Archive
Archive
C++
goodbit stream state
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Reply to thread
Message
[QUOTE="john, post: 3049673"] The message corrected: It is the 0 that made me asking. Does it mean that it is guaranteed that good() is true when goodbit has the value 0, on all systems? Also does this apply to the rest iostates, badbit, eofbit, and failbit, that the OK setting is the value 0? So, can we just use it in the style: #include <iostream> void iocopy() { using namespace std; char c; while(!cin.goodbit) { cin.get(c); cout<< c; } } int main() { iocopy(); } In my system (Linux) the above code hangs (infinite loop) on EOF (Ctrl-D), but the code: #include <iostream> void iocopy() { using namespace std; char c; while(cin.good()) { cin.get(c); cout<< c; } } int main() { iocopy(); } does not hang. The code: #include <iostream> void iocopy() { using namespace std; char c; cout<< boolalpha; cout<< "\ncin.good()= "<< cin.good()<< endl << "cin.goodbit= "<< cin.goodbit<< endl << "cin.badbit= "<< cin.badbit<< endl << "cin.eofbit= "<< cin.eofbit<< endl << "cin.failbit= "<< cin.failbit<<endl; do { cin.get(c); cout<< c; }while( cin.good() ); cout<< "\ncin.good()= "<< cin.good()<< endl << "cin.goodbit= "<< cin.goodbit<< endl << "cin.badbit= "<< cin.badbit<< endl << "cin.eofbit= "<< cin.eofbit<< endl << "cin.failbit= "<< cin.failbit<<endl; } int main() { iocopy(); } reveals: [john@localhost src]$ ./foobar-cpp cin.good()= true cin.goodbit= 0 cin.badbit= 1 cin.eofbit= 2 cin.failbit= 4 1 1 1 1 cin.good()= false cin.goodbit= 0 cin.badbit= 1 cin.eofbit= 2 cin.failbit= 4 [john@localhost src]$ I entered '1' twice from keyboard and then pressed Ctrl-D. My system is CentOS 5.0 x86. [john@localhost src]$ g++ -v Using built-in specs. Target: i386-redhat-linux Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux Thread model: posix gcc version 4.1.1 20070105 (Red Hat 4.1.1-52) [john@localhost src]$ Conclusions: In my system, it looks like goodbit is 0 before input and remains 0 after EOF, the other "*bits" are non-zero before input and retain their values after EOF, while good() changes after EOF. Am I missing something here? :-) [/QUOTE]
Verification
Post reply
Forums
Archive
Archive
C++
goodbit stream state
Top