Please be patient when receiving answers. We have a lot of people asking and answering and we get questions when we can. Thanks!

The answer to your question is that when you use cin.get it reads in characters up to the first carriage return, but leaves the carriage return in the buffer. So you get s0 containing the first line. When you use getline, it takes in the carriage return also. So being that there is a carriage return sitting in the buffer still, it takes that in and only the carriage return, leading to s1 containing no string (just "eating up" the carriage return). Lastly since the carriage return is now eaten, the second getline gets the rest of the line and puts it in s2.
The result.... s0 contains the first line, s1 contains a carriage return and s2 contains the second line.