Jump to content
  • Advertisement
Sign in to follow this  
charlando

getline( cin, str ) bad!

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

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm making a simple console program for input/output files, for practicing my C++ :) I found out that to get a whole string (including spaces) i'd have to use getline. So i put it in like
getline( cin, cont );
//cont is a string

The problem though is that it doesn't stop to let me input the string, why is this? What's the solution?

Share this post


Link to post
Share on other sites
Advertisement
Well, I'm not pretty sure... but perhaps that is because there's already something on the queve. So the getline function reads that instead of waiting for new input. Try putting a cin.get() functions before that statement (note, this is just for checking if that's the error...). Or perhaps another getline function.

Hope it helps :)

Share this post


Link to post
Share on other sites
Not sure if this is your problem but consider the following:


#include <iostream>
#include <string>

using namespace std;

int main()
{
string s;

char c=cin.get();

getline(cin,s);

cout << "[" << c << "]\n[" << s << "]\n";

return 0;
}



Output:
[x]
[]

This exhibits the behaviour you describe on the getline line. The problem is that after the character has been read with cin.get(), there is a newline character waiting in the input stream, as jorlemb suggested, so the getline just reads this and returns with an empty string result.

The solution to this would be adding a cin.ignore line before the getline:


#include <iostream>
#include <string>

using namespace std;

int main()
{
string s;

char c=cin.get();

cin.ignore(1,'\n');

getline(cin,s);

cout << "[" << c << "]\n[" << s << "]\n";

return 0;
}



Output:
[x]
[hello]

The program above now works as you would expect.

HTH Paul

Share this post


Link to post
Share on other sites
Quote:
Original post by charlando
The problem though is that it doesn't stop to let me input the string, why is this? What's the solution?


You would need to give us the actual code you are using and what input you are testing it on. By itself, your getline() call is fine - it is the interaction with the rest of your code that causes trouble.

Share this post


Link to post
Share on other sites
So using this method would not allow spaces?

char c;
cin >> c;

But the method above allows spaces to be stored in that variable?

Share this post


Link to post
Share on other sites
Quote:
Original post by Saddist
So using this method would not allow spaces?

char c;
cin >> c;

But the method above allows spaces to be stored in that variable?


Yep. cin >> whatever_type will skip whitespace whereas getline will just read anything up to a newline character by default, although any termination character can be specified as the third parameter to getline.

[EDIT] Oops. See Fruny below. I thought cin >> always skipped whitespace but apparently that is just for std::strings.

[Edited by - EasilyConfused on September 17, 2006 4:45:13 PM]

Share this post


Link to post
Share on other sites
To be precise, char c; cin >> c; will only read one character (white space or not) and string s; cin >> s; will only read one word, stopping at whitespace. Whether or not leading spaces are skipped or included in the string is something that can be controlled by setting flags on the stream.

cin.ignore() will ignore one character, in your case, likely to be the newline that's causing you trouble, but a better solution is to use cin >> ws; which will eat leading white space (including '\n'). You may have to #include <iomanip> to get access to it (I can never remember which manipulator is where).

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!