C++中面向行的输入:get

C++中面向行的输入:get

我们来试试另一种方法。istream类有另一个名为get()的成员函数,该函数有几种变体。其中一种变体的工作方式与 getline()类似,它们接受的参数相同,解释参数的方式也相同,并且都读取到行尾。但 get并不再读取并丢弃换行符,而是将其留在输入队列中。假设我们连续两次调用get():

cin.get(name,ArSize);
cin.get(dessert,Arsize);//aproblem

由于第一次调用后,换行符将留在输入队列中,因此第二次调用时看到的第一个字符便是换行符。因此 get()认为已到达行尾,而没有发现任何可读取的内容。如果不借助于帮助,get()将不能跨过该换行符。幸运的是,get()有另一种变体。使用不带任何参数的 cin.get()调用可读取下一个字符(即使是换行符),因此可以用它来处理换行符,为读取下一行输入做好准备。也就是说,可以采用下面的调用序列:

cin.get(name,ArSize); // read first line
cin.get();             // read newline
cin.get(dessert,Arsize); //read second line

另一种使用 get()的方式是将两个类成员函数拼接起来(合并),如下所示:

cin.get(name,ArSize).get();//concatenate member functions

之所以可以这样做,是由于 cin,get(name,ArSize)返回一个 cin 对象,该对象随后将被用来调用 get()函数。同样,下面的语句将把输入中连续的两行分别读入到数组namel和name2中,其效果与两次调用cin.getline( )相同:

cin.getline(namel,ArSize).getline(name2,ArSize);

程序清单4.5采用了拼接方式。第11章将介绍如何在类定义中使用这项特性。

// instr3.cpp -- reading more than one word with get() & get()
#include <iostream>
int main()
{
    using namespace std;
    const int ArSize = 20;
    char name[ArSize];
    char dessert[ArSize];

    cout << "Enter your name:\n";
    cin.get(name, ArSize).get();    // read string, newline
    cout << "Enter your favorite dessert:\n";
    cin.get(dessert, ArSize).get();
    cout << "I have some delicious " << dessert;
    cout << " for you, " << name << ".\n";
    // cin.get();
    return 0; 
}

下面是程序清单 4.5 中程序的运行情况:

Enter your name :
Mai Parfait
Enter your favorite dessert :
Chocolate Mousse
I have some delicious Chocolate Mousse for you, Mai Parfait

需要指出的一点是,C++允许函数有多个版本,条件是这些版本的参数列表不同。如果使用的是 cin.get(name,ArSize),则编译器知道是要将一个字符串放入数组中,因而将使用适当的成员函数。如果使用的是 cin.get(),则编译器知道是要读取一个字符。

对C++感兴趣的朋友点这里:C/C++课程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值