读书人

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

发布时间: 2013-04-21 21:18:07 作者: rapoo

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

读书人网 >C++

热点推荐