Archived

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

cin and cin.getline()

This topic is 5048 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

Recommended Posts

I need to get a file path from the user in a program I''m writing, so I was using cin.getline() with a character string to get it. This worked just fine until I moved the block of code into another function. Now, the program simply skips the cin.getline() altogether the first time it reaches it. If I use just plain cin, it works, but it will not take spaces, which becomes a problem. Though I''m not sure it will do any good, here''s the block of code in question:
   int flag = 0;
while (flag == 0)
{
cout << "What is the file path?: ";
char path[50];
cin.getline(path, 50);

fstream file;
file.open (path, ios::in);

if ( file.is_open() ) //if the file is opened successfully...

{
flag = 1;  //make it so that the while loop doesn''t repeat

filePath = path;
}
if ( ! file.is_open() )
{
cout << "That file could not be opened!\n"
<< "Please check the path and try again.\n\n";
}

file.close();
}
Basically, this is just getting a file path, making sure that it is good, and if it isn''t repeating the process. When I go through it the first time, however, it skips directly to the output of "That file could not be opened!", but when it repeats it acts normally. I am including the iostream and fstream headers. Any suggestions? Thanks!

Share on other sites
VC6 by any chance? The STL implementation supplied with that version of MSVC is buggy; find fixes here.

After fixing, see if the condition persists. Then we''ll know it''s in your source.

Share on other sites
Instead of doing all of these fixes to the borked Microsoft VC 6 STL implementation, I suggest you get STLport - an alternative and widely used implementation of the Standard Template Library that is, well “better” then the one that comes standard with MSVC 6. However, note that the STL implementation that comes with MSVC .NET is _said_ to be better/faster then STLport, but then again it could be something propertary (not a surprise coming out of Microsoft.)

Share on other sites
Try adding a std::cin.ignore( ) call before or after your getline statement (I dont remember where exactly). This has fixed similar sounding issues in the past.

[edited by - _Twiggie_ on March 23, 2004 5:30:36 PM]