cin.get()与cin.getline()

来源:互联网 发布:目标利润推算法 编辑:程序博客网 时间:2024/04/29 12:38
cin.get()与cin.getline()区别在于前者对于终止符(terminator)“不抛弃,不放弃”,后者舍弃。string.h中的getline(istream,string)与cin.getline(string,streamsize)类似,但输入字符串后,回车在VC6下可能要按两次,Dev C++下不会。




cin.get()参数有四种,从0个到3个,其中Ch为模板类型参数:


int_type get();                                  //获得一个字符,可为eof与terminator


istream& get(Ch& p);                       //获得一个字符给p,可为terminator,不可为eof


istream& get(Ch *p,streamsize n);   //定义最大输入,默认terminator为’\n’


istream& get(Ch *p,streamsize n,Ch term);    //重定义terminator,不再为’\n’




cin.getline()参数有两种,从2个到3个:


istream& getline(Ch *p,streamsize n);


istream& getline(Ch *p,streamsize n,Ch term);




举三个例子如下:


①    char ch;cin>>ch;


//A


char buf[256];cin.get(buf,256);


这时会出错,因为第一次cin>>ch;后,留下了’\n’在缓冲区;再get(buf,256)会立即遇到terminator而终止!须在A处补上cin.get();或cin.ignore();或者cin.clear();cin.sync();




②    而第二个程序(Bjarne书中的)将只打出第一行,因为cin.get()遇到’\n’立即录入,此时cin变为badbit:


while(cin){


cin.get(buf,256);cout<<buf;


}




③    第三个例子,可以获取buf,因为cin.getline()有抛弃终止符功能(discard the terminator),B行的cin.getline()将抛弃掉ch后面的’\n’,使第三行正常输入。


char ch;cin>>ch;


cin.getline(buf,256);    //B


cin.getline(buf,256);


cout<<buf<<endl;




总结:通常复制,用cin.getline()。按字节复制文件,用cin.get(ch)。


       用cin>>ch;或cin.get(buf,256);这种形式时就得考虑到残留的’\n’归属问题。

原创粉丝点击