c++ - Why is iostream::eof inside a loop condition considered wrong? -


i found comment in this answer saying using iostream::eof in loop condition "almost wrong". use while(cin>>n) - guess implicitly checks eof, why checking eof explicitly using iostream::eof wrong?

how different using scanf("...",...)!=eof in c (which use no problems)?

because iostream::eof return true after reading end of stream. not indicate, next read end of stream.

consider (and assume next read @ end of stream):

while(!instream.eof()){   int data;   // yay, not end of stream yet, read ...   instream >> data;   // oh crap, read end , *only* eof bit set (as fail bit)   // stuff (now uninitialized) data } 

against this:

int data; while(instream >> data){   // when land here, can sure read successful.   // if wasn't, returned stream operator>> converted false   // , loop wouldn't entered   // stuff correctly initialized data (hopefully) } 

and on second question: because

if(scanf("...",...)!=eof) 

is same as

if(!(instream >> data).eof()) 

and not same as

if(!instream.eof())     infile >> data 

Comments

Popular posts from this blog

php - Submit Form Data without Reloading page -

linux - Rails running on virtual machine in Windows -

php - $params->set Array between square bracket -