get()和getline()函数

要获取一行输入,有两种选择:成员函数get()或getline()。

两个函数都有三个参数:指向存储结果字符的缓冲区指针、

缓冲区大小(不能超过其限度)和停止读输入的终止符。

终止符有一个经常用到的缺省值”\n”。两个函数遇到输入

终止符时,都把零储存在结果缓冲区里。


其不同点是,get()遇到输入流的分隔符就停止,而不从输入流中提取分隔符。

如果用同样的分隔符再调用一次get()函数,它会立即返回而不带任何输入。

getline与其相反,它从输入流中提取分隔符,但仍没有把它储存到结果缓冲区里。

get有三种其它的重载版本:一个没有参数表,返回下一个字符,用的是一个int返回值;

一个把字符填进字符参数表,用一个引用;一个直接存储在另一个输入输出流对象的基本缓冲区结构里。


除没有参数表的get()外。所有get()和getline()的版本都返回字符来源的输入流,

没有参数表的get()返回下一个字符或EOF。如果取回输入流对象,要询问一下它是否正确,

我们可以用成员函数good()、eof()、fail()和bad()询问任何输入输入流是否正确。

下面程序说明了get()和getline()之间的区别:

#include <fstream>
#include <iostream>
#include <assert.h>
using namespace std;

#define SZ 100		//buffer size


int main() {
	char buf[SZ];
	{
		ifstream in("strfile.cpp");	//read
		assert(in);
		ofstream out("strfile.out");	//write
		assert(out);
		int i = 1;		//line counter
		
		while(in.get(buf, SZ)) {	//不会从输入流中提取分隔符,即分隔符还在输入流中
			in.get();	//跳过分隔符
			cout << buf <<endl;		//必须加上\n
			out << i++ << ":" << buf <<endl;
		}
	}
	
	ifstream in("strfile.out");
	assert(in);
	
	while(in.getline(buf,SZ)) {	//会从输入流中提取分隔符,但不会放入结果缓冲区,即分隔符被丢弃了
		char *cp = buf;
		while(*cp != ':')
			cp++;
		cp += 2;
		cout << cp <<endl;	//必须加上\n
	}
	
	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值