Is this a bug with getline(), or am I doing something wrong. Right way to use getline()?

c++, istream

Solution

Add

cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );

after your

cin >> c;

Consider the following input:

    dog
    cat
    y
    owl
    fish
    n

If we examine the characters that are present in the input stream individually, we'll see:

    d o g \n c a t \n y \n o w l \n f i s h \n n \n

The first call to `getline` consumes `dog\n`; the second consumes `cat\n`, leaving this:

    y \n o w l \n f i s h \n n \n

The first call to `cin >> c` consumes only `y` but not the subsequent newline, leaving this:

    \n o w l \n f i s h \n n \n

Now, the fun begins: What happens during the next call to `getline`? Why it reads up to the next newline, of course. So the next call to `getline` returns an empty line, and leaves `owl...` in the input stream.

The solution, as I outlined above, is to consume the remainder of the (now useless) input line.

Problem

It might not be a bug, but I don't know what is going wrong. My first entry is repeated for str1 on 2nd iteration, and is same way from then. Only first iteration goes good. ``` #include <iostream> #include <string> using namespace std; int main () { cout << " \n Enter two words. \n " ; char c = 'y'; string str; string str1; while (c == 'y'){ getline(cin,str); getline (cin,str1); cout << " \n\n str : " << str << " str1 : " << str1 ; cout << " \n Continue ? \n " ; cin >> c; } return 0; } ``` The output is : ``` Enter two words. hello world this is mr str : hello world str1 : this is mr Continue ? y hello world str : str1 : hello world Continue ? n ```

Original source