c++ - strange failure using stringstream to read a float value -


i have following simple code reads float value (double) using c++ stringstream. use stringstream::good detect whether read successful. strangely, value read float variable, good() returns false. code @ bottom returns:

failed: 3.14159 

i compiled code using gcc 4.8.1 under mingw32, g++ -std=c++11 test.cpp.

any idea why read not good? , what's proper way tell float read successfully?

thanks

#include <sstream> #include <iostream> using namespace std;  void readfloat(string s) {   double = 0!;    stringstream ss(s);    ss >> i;   if (ss.good())     cout << "read: " << << endl;   else     cout << "failed: " << << endl; }  main() {   readfloat("3.14159"); } 

when streams reach end of stream during extraction, set std::ios_base::eofbit in stream state alert user no more characters can read. means good() no longer returns true until stream state cleared.

generally, good() not reliable way determine i/o success. good() condition means every bit (including eofbit) not set, can misleading if trying determine if i/o operation succeeded. because eofbit set, program tell i/o operation failed when didn't.

instead, better wrap entire extraction in conditional determine if succeeds. there implicit cast in stream boolean , stream call !this->fail() internally, better alternative good():

if (ss >> i) {     std::cout << "read: " << << std::endl; } else {     std::cout << "failed: " << << std::endl; } 

Comments

Popular posts from this blog

how to proxy from https to http with lighttpd -

android - Automated my builds -

python - Flask migration error -