关于C++的getline疑问?

来源:百度知道 编辑:UC知道 时间:2024/05/23 15:05:54
#include <iostream.h>
#include <stdlib.h>

main()
{
char s[5],s2[4];
cin.getline(s,5);
cin.getline(s2,4);
cout<<s<<endl<<s2<<endl;
system("pause");

}

不是说getline丢弃换行符啊 例如我第一次输入 abcd 就直接打印输出啦 “abcd” 和 “空格”
换行符没有丢弃啊 还在输入列中啊 被s2接受啦。
FIMLight gbwzx 你们2个说的我知道

cin.getline(s,5);
读取4个字符 第五个字符为空字符 并丢弃换行符

既然换行符被丢弃啦 为什么还在输入列中
被下面的s2给接收啦

getline后面可以指定2个参数或3个参数,
2个参数时,第2个参数就是读取的位数,
3个参数时,第3个参数是终止符,只要2个参数中有一个满足了,就停止读入,
如楼上方式,将会是读5个字符或者遇到'\n'停止

—————————————————

哎,今天用到getline,仔细研究一番才发现楼主这问题问的这么深刻,来看一下getline的实现吧,共同学习之~~

以下为getline函数的实现,在头文件istream中。
下面具体分析一下,太深奥的分析不了,只简述一下,已经足够用了:

_Myt& __CLR_OR_THIS_CALL getline(_Elem *_Str, streamsize _Count)
{// get up to _Count characters into NTCS, discard newline
return (getline(_Str, _Count, _Myios::widen('\n')));
}
//注:可以看出,两个参数的getline实际也是调用了以'\n'为结束符的三参数getline函数。

_Myt& __CLR_OR_THIS_CALL getline(_Elem *_Str,
streamsize _Count, _Elem _Delim)
{// get up to _Count characters into NTCS, discard _Delim
_DEBUG_POINTER(_Str);
ios_base::iostate _State = ios_base::goodbit;
_Chcount = 0;
const sentry _Ok(*this, true);//注:这句关键,它关系到下面的if是否执行,也就是是否读输入流,整个函数流程太多了,也没看十分明白,但可以肯定的是,当输入流的状态是正常时,该函数的返回值也是true,反之,则返回false。
if (_Ok