getline函数的疑问有什么?
下面是C++Primer中的一段代码:

intmain()

...{
stringline;
while(getline(cin,line))
cout<<line<<endl;
return0;
}
我按照此代码编译运行后发现,在输入一行字符串后必须进行2次回车换行,程序

才会输出该字符串,就是说不能及时看到最近的输出信息。

这和
while(cin>>line)
cout<<line<<endl;
有很大区别,利用cin在输入一行字符串只经过一次回车换行,立刻就能输出该字

符串的信息。

请教高人:同样是输入,同样使用while语句,为何会造成这样的差别?
有人回复说是VC的BUG,不知道是否属实,下面是一种我比较认同的解释:
MyTurn原创2006-07-1911:15:54查看评论
#include<iostream>
#include<string>
usingnamespacestd;
voidmain(void)

...{
stringst;
cout<<"Inputst:";
getline(cin,st);
cout<<st<<endl;
}

上面这段代码,如果输入abc,那么需要按两次回车键才能显示abc(在VC6中),因为getline有三个参数,第三个参数是字符串的结束符,也就是当getline遇到这个结束符时,就不在接受输入了,比如写成getline(cin,st,'s');即使输入的是abcsabc那么也只会显示abc,因此对于上面出现的情况,有人说getline默认情况下以回车(' ')作为结束符,第一次按回车表示字符串结束,第二次按回车才开始输出。也有人说这是VC6的bug,我觉得前一种解释比较合理,因为:

如果你输入abc(回车)abc,那么程序会显示abc,可见回车的确是函数默认的结束符。
关于getline函数:
Getline函数是编辑控件的成员函数,读取控件里的内容cin.getline是从屏幕读入字符串。MFC中有文件类的read函数从文件读取数据。
或不用MFC用文件流提取操作符<<

下面是添加完整的测试源码:
#include<iostream>
#include<string>
usingnamespacestd;
intmain()

...{
stringline;
while(getline(cin,line))
cout<<line<<endl;
return0;
}

源码2:
#include<iostream>
#include<string>
usingnamespacestd;
intmain()

...{
stringline;
while(cin>>line)
cout<<line<<endl;
return0;
}

本文地址:
http://www.45fan.com/a/luyou/70352.html