C++ primer plus上的一个有关问题

C++ primer plus上的一个问题
#include <iostream>
#include <string>
int main()
{
    using namespace std;
    string name;
    string dessert;

    cout << "Enter your name:\n";
    getline(cin, name);  // reads through newline
    cout << "Enter your favorite dessert:\n";
    getline(cin, dessert);
    cout << "I have some delicious " << dessert;
    cout << " for you, " << name << ".\n";
    return 0; 
}
这是第四章的一道习题,不知道为什么第一个输入总要敲两次回车,书上有个类似的例子程序也需要敲两个回车,而且执行出来的结果跟书上给的结果不一样…………求大神指点迷津!
C++ String

------解决方案--------------------
引用:
C/C++ code?123456[root@server program]# ./a.out Enter your name:tracyxia716Enter your favorite dessert:wwwI have some delicious www for you, tracyxia716.
g++ 4.1.2下运行结果,只需每次输入结束只需运行一次回车
……

g++ 4.1.2下运行结果,每次输入结束只需输入一次回车
------解决方案--------------------
引用:
我是在VC6.0上运行的…………要敲两次,而且运行结果是错的…………想不通,而且那个答案说这上面所有的代码都在VC6.0上验证过了,难道是我的编译器有问题么?

这个的确是VC6.0编译器的问题,vc6.0对C++标准支持不好,建议使用VS2008/2010,或g++,
这个问题在VS2008中也是不存在的。在VC6.0中测试结果如下:

Enter your name:
fuck

Enter your favorite dessert:
shit
I have some delicious  for you, fuck.

可见,第二个输入shit没有显示,是因为输入fuck后,输入两次回车才把输入送到缓冲区,这时输入缓冲区fuck结尾有两个换行符,getline(cin, name);获取一个结束,getline(cin, dessert);直接获取第二个换行符返回,所以输出结果里没有shit,这个bug是VC6.0的问题,解决方法可以参考:http://www.cnblogs.com/EnCaL/archive/2012/12/03/2800138.html