每次读取一行字符串输入(有待补充)

c++中的istream类中的类cin提供了面向行的类成员函数:geiline()和get().

区别:两个函数读取到换行符时都会停止,然而geiline()会丢弃换行符而get()会保留在输入序列中

1,geiline()通过换行符来确定结尾,使用方式是cin.geiline(Arrayname,size),但是如果定义的数组空间只有30的话则该函数最多读取29个字符并自动在结尾处添加空字符(如果这行包含的字符不足29个getline()成员函数还可接受第三个可选参数),geiling()函数在读取指定数目的字符或者换行符时才会停止读取get()也一样。getline()每次只读取一行,通过换行符来确定行尾,但不保存换行符,在储存字符串时他会用空字符来代替换行符。

2,get()

get()不会丢弃换行符但是当连续调用它的时候会出现一种情况

#include<iostream> 
using namespace std;
int main() {
	char ammn[30] = {};
	char ammr[30]={};
	cin.get(ammn, 30);
	cin.get(ammr, 30);
	cout << ammn;
    cout<<ammr;
	return 0;
}

由于第一次调用后换行符留在了输入队列中,因此第二次调用后看到的第一个字符就是换行符,因此get()以为已经到达了行尾而没用发现任何可读取的内容,如果不借助帮助,get()将不能跨过该换行符,使用不带任何参数的cin.get()调用可读取下一个字符

#include<iostream> 
using namespace std;
int main() {
	char ammn[30] = {};
	char ammr[30]={};
	cin.get(ammn, 30);
    cin.get();
	cin.get(ammr, 30);
    cout<<ammr;
	cout << ammn;
	return 0;
}

当然还有一种get()方法可以使两个类成员函数拼接起来与以上效果相同,

#include<iostream> 
using namespace std;
int main() {
	char ammn[30] = {};
    char ammr[30]={};
	
	cin.get(ammn, 30).get();
    
	cin.get(ammr, 30);
	cout << ammn;
    cout<<ammr;
	return 0;
}

当然getline()也由此用法如

#include<iostream> 
using namespace std;
int main() {
	char ammn[30] = {};
    
	char ammr[30] = {};
	cin.getline(ammn,30).getline(ammr,30);
	cout << ammn;
    cout<<ammr;
	return 0;
}

注释:c++允许函数有多个版本,但条件是这些版本的参数列表不同,如带参数的get()与get(),编译器就可以辨别出前者是读取一行字符串,而后者则是读取一个字符

注释:为什么使用get()而不是getline()呢?因为get()可以检查出读取停止是因为数组满了还是因为读取到了换行符。

3,空行以及其他问题(有待补充)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叽里呱啦呱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值