c++getline和get的区别

getline()和get()这两个函数都读取一行的输入,直到达到换行符。然而不同的是gerline()将丢弃换行符,而get()将换行符保留在输入序列中。

(1)getline

#include <iostream>
using namespace std;
const int SIZE = 15;
int main(){

    char name[SIZE];
    char dessert[SIZE];

    cout << "Enter your name:";
    cin.getline(name, SIZE);
    cout << "Enter your favorite dessert:";
    cin.getline(dessert, SIZE);
    cout << " I have some delicious " << dessert;
    cout << "for you," << name << ".\n";


    return 0;
}

结果:
这里写图片描述
该程序可以读取完整的姓名以及用户喜欢的甜点,是因为getline()函数每次读取一行,它通过换行符来确定行尾,但不保存换行符。也就是他会抛弃有Enter键生成的换行符,并将换行符替换为空字符。

(2)get()
get()函数不再读取并丢弃换行符,二是将换行符保存到队列中,假设我们连续两次调用get()
cin.get(name,ArSize);
cin.get(dessert,ArSize);
由于第一次调用后,换行符将留在输入队列中,因此第二次调用时看到的第一个字符便是换行符,get()会认为已经到达行位,没有发现可读取的内容,如果没有其他帮助,将不能跨过该换行符。

#include <iostream>
using namespace std;
const int SIZE = 20;
int main(){

    char name[SIZE];
    char dessert[SIZE];

    cout << "Enter your name:";
    cin.get(name, SIZE);
    cout << "Enter your favorite dessert: ";
    cin.get(dessert, SIZE);
    cout << "I have some delicious " << dessert;
    cout << " for you," << name << ".\n";


    return 0;
}

运行结果,第二个get()看到的第一个字符是第一个get()保存下来的换行符,所以第二个没有输入就直接进入下一行了。
这里写图片描述
解决这个问题的方法就是使用一个不带任何参数的cin.get()调用可读取下一个字符,因此通常用这种方法来处理换行符。
cin.get(name,ArSize);
cin.get();
cin.get(dessert,ArSize);
我们将上述程序改为

    cout << "Enter your name:";
    cin.get(name, SIZE).get();
    cout << "Enter your favorite dessert: ";
    cin.get(dessert, SIZE);
    cout << "I have some delicious " << dessert;
    cout << " for you," << name << ".\n";

程序运行结果为
可见,换行符被处理掉了。
这里写图片描述
关于更多的输入字符串和数字的问题,可以参考c++primer plus 第四章P81.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值