Archived

This topic is now archived and is closed to further replies.

Shrap

Newb question

Recommended Posts

Hey guys, I''m sure anyone can spot what is wrong with the following code, but I can''t figure what I''m doing wrong. I am trying just basic read from file commands that will break words from a file by wordspaces. But it doesnt read the file at all as if it wasn''t there. I am using Dev C++ compiler, and I have the file that I''m reading from in the same directory as this program. Don''t know if I am doing this write... please help // //whitespace.cpp #include <string> #include <iostream> #include <fstream> #include <vector> using namespace std; int main() { vector words; ifstream in("getwords.cpp"); string word; while(in >> word) words.push_back(word); for(int i = 0; i < words.size(); i++) cout << words << endl; }

Share this post


Link to post
Share on other sites
Why are you using the result of the >> operator as the condition for your while loop? It returns a copy of the file stream not a boolean value.

Share this post


Link to post
Share on other sites
smart_idiot: no, that syntax is valid. The implicit cast to void* causes it to return false if failbit or badbit is set. Read your STL documentation.

Shrap: I suggest you add a bit more error-checking to your code. after declaring in, print a message and exit if the stream is not in a "good" state.


But... but that''s what HITLER would say!!

Share this post


Link to post
Share on other sites
Your code for the most part is fine.. I suspect that the current working directory is wrong... Call:

#include <windows.h>

char szBuffer[256];
GetCurrentDirectory(256,szBuffer);
cout<
to figure out where you are and use

SetCurrentDirectory("directory of the file") to specify where you want to load from if you don''t use a path.

Compilers use different directories as the current directory compared to when you just double click on the exe.

www.brightbug.com

Share this post


Link to post
Share on other sites
quote:
Original post by Sneftel
Read your STL documentation.


Okay, you're right.

quote:
smart_idiot's stl documentation (basic_ios)
bool fail() const;
Returns true if failbit or badbit is set in rdstate().

bool operator!() const;
Returns fail() ? 1 : 0;

operator void*() const;
Returns fail() ? 0 : 1;



I'm not sure why it is converted to a void* instead of a bool, but the effect is the same I guess. . .

[edited by - smart_idiot on March 4, 2003 2:09:08 PM]

Share this post


Link to post
Share on other sites
quote:
Original post by Sneftel
smart_idiot: no, that syntax is valid. The implicit cast to void* causes it to return false if failbit or badbit is set. Read your STL documentation.


It''s part of iostreams, not stl.

The gcc documentation just says it returns *this, and that on an error it sets a flag and rethrows any exceptions that may have occurred. The dinkumware documentation says pretty much the same thing. I couldn''t find any mention of casts to void* in either one. Where are you getting this from?

Share this post


Link to post
Share on other sites
quote:
Original post by Dobbs
The gcc documentation just says it returns *this, and that on an error it sets a flag and rethrows any exceptions that may have occurred. The dinkumware documentation says pretty much the same thing. I couldn't find any mention of casts to void* in either one. Where are you getting this from?


Read smart_idiot's last post; it's the same docs I looked at, AFAICT. For more info, I suggest http://www.cplusplus.com .
I really have no idea why they went with void* instead of bool; I assume there was some weirdness in the standards process early on that made it a good idea, and then nobody bothered changing it.


But... but that's what HITLER would say!!

[edited by - sneftel on March 4, 2003 5:56:24 PM]

Share this post


Link to post
Share on other sites