面向行的输入:getline()和get()

getline():
getline()函数读取整行,它使用通过回车键输入的换行符来确定输入结尾。调用方法为cin.getline()。该函数有两个参数。第一个参数是数组名,第二个参数是要读取的字符数。例如第二个参数为n,则函数最多读取n-1个字符,因为至少要保留一个空间存空字符,即'\0'。getline()成员函数在读取指定数目的字符或遇到换行符时停止读取。当遇到换行符时,它也会从输入流中读取该换行符,但在存储字符串时,用空字符代替换行符来存储在字符串中。

get():
该函数有几种变体,其中一种变体的工作方式与getline()类似,接受的参数的意义与解释都相同,并且都是读取到行尾。但是当遇到换行符时,get()方法并不读取换行符,而是将其留在输入流中。例如当执行以下语句时:
    cin.get(a,100);
    cin.get(b,100);
由于在输入b的时候,输入流中第一个字符是在输入a时留下来的换行符,因此实际上输入给b的字符是一个换行符。为了避免这个问题,可以在其中添加一条一句,即:

    cin.get(a,100);
    cin.get();
    cin.get(b,100);

cin.get()会“吸收掉”输入流中留下来的换行符。也可以这么简写:
    cin.get(a,100).get();
    cin.get(b,100);

之所以可以这么做,是因为cin.get(a,100)返回的是一个cin对象,该对象随后将被用来调用get()方法。同样道理,下列语句也是允许的。
    cin.getline(a,100).getline(b,100);

关于string使用getline()
C++添加了string类扩展了C++库。因此可以用string类型的变量而不是字符数组来存储字符串。要使用string类,必须包含头文件string。
一般字符数组和string变量使用getline()方法是不同的。
    char a[100];
    string str;

    cin.getline(a,100);
    getline(cin,str);
cin.getline()这种是句点表示法,函数getline()是istream类的一个类方法。getline(cin,str)没有用到句点表示法,这表明这个getline()不是类方法。它将cin作为参数,指出到哪里去查找输入。另外,也没有指出字符串的长度,因为string对象会根据输入的串的大小自动调整自身的大小。
为什么第二个getline()不是istream的类方法呢。在引入string类之前很久,C++就有了istream类。因此istream的设计考虑到了诸如double和int等基本C++数据类型,但没有考虑到string类型,所以string类中,有处理double,int和其他基本类型的类方法,但没有处理string对象的类方法。
但cin方法也适用与string类对象,这涉及到友元函数,这里先不阐述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值