C++之cin.get

一、cin的>>运算符重载
cin的>>运算符重载有个缺陷,则是遇到空格,tab键,回车都会当做结束符,举个例子:

#include<iostream>

using namespace std;

int main() {
    char buf[1024];
    cin >> buf;
    cout << buf << endl;
    system("pause");
    return 0;
}

输出结果:

这里写图片描述

可以看到遇到空格就不往buf中读了,虽然cin>>输入很方便,但这个问题就是cin的>>运算符重载的严重缺陷。因此就引入了cin的成员函数。

二、cin的get成员函数

1、cin.get(char &)

#include<iostream>

using namespace std;

int main() {
    char ch;
    while (cin.get(ch), !cin.eof()) {
        cout.put(ch);
    }
    system("pause");
    return 0;
}

输出结果:

这里写图片描述

可以看到get函数可以把空格,\t和回车都读入,如果输入一串字符串,最后以ctrl+z结束,仍然会显示在屏幕上,因为会把ctrl+z转换成另一种字符,只有单独输入ctrl+z时,通过cin.eof()判断出是结束符表示结束。跳出循环。

2、cin.get()

#include<iostream>

using namespace std;

int main() {
    char ch;
    while (ch = cin.get(), !cin.eof()) {
        cout.put(ch);
    }
    system("pause");
    return 0;
}

输出结果:

这里写图片描述

cin.get()和cin.get(char&)这两个函数是相似的。

3、cin.get(char *, int)

#include<iostream>

using namespace std;

int main() {
    char buf[10];
    cin.get(buf, 1024);
    cout << buf << endl;
    system("pause");
    return 0;
}

但通过键盘输入时,最多可以读9个字节到buf字符串中,最后一个是’\0’,空格,\t都可以读入,若输入超过9个字节,则只读入9个字节到buf中。

输出结果:

这里写图片描述

123后面是个tab,\t表示一个字符。

4、cin.get(char* , int ,char)

#include<iostream>
#include<string.h>

using namespace std;

int main() {
    char buf[1024];
    cin.get(buf, 10, 'i');
    cout << buf << endl;
    memset(buf, 0, sizeof(buf));
    cin.get(buf, 10, 'i');
    cout << "---" << buf << endl;
    system("pause");
    return 0;
}

输出结果:

这里写图片描述

cin.get(buf, 10, 'i');

这句是说超出9个字节或者遇到字母i则停止读入到buf中,字母i不会读入到buf中。

可以看到第二个buf什么也没有输出,说明在第二次get函数调用时,没有跳过字母i,再次遇到字母i,此时buf里面什么都没读入。这里用cin.ignore()函数进行跳过:

#include<iostream>
#include<string.h>

using namespace std;

int main() {
    char buf[1024];
    cin.get(buf, 10, 'i');
    cout << buf << endl;
    memset(buf, 0, sizeof(buf));
    cin.ignore(1);
    cin.get(buf, 10, 'i');
    cout << "---" << buf << endl;
    system("pause");
    return 0;
}

输出结果:

这里写图片描述
这里写图片描述

可以看到第二次buf成功输出了,为什么第一次回车之后第二次的buf没有立马输出呢,因为达到get的要求,要么buf可以读入9个字节,要么到达了字母i,这两个条件都没有满足,系统就等待继续输入,最后输入够9个字节,可以看到回车符也被读入到了buf中,最终输出。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值