首页 > 编程 > C++ > 正文

C++中利用文件输入对象(即ifstream对象)来读取文本文件中带空格的字符串以及混合输入数字与字符串

2019-11-08 18:40:52
字体:
来源:转载
供稿:网友

    学习C有段时间了,但是C++刚开始学,在看到文件操作时遇到了读取文本文件中带空格的字符串的问题。现总结如下:ifstream类定义的对象用法与cin非常相似,连类中的方法都很相似,假设定义 ifstream inFile;比如:cin>>ch与inFile>>ch;cin.get()与inFile.get()以及cin.getline()与inFile.getline()的用法基本相同,最重要的是读取一行string类字符串的函数getline(),用法为:getline(cin,str); 只要将其修改为getline(inFile,str);即可实现读取文本文件中带空格的字符串。

TXT文件内容如下:

4Sam Stone2000Freida Flass100500Tammy Tubbs5000Rich Raptor55000

示例代码如下:(下面程序包含混合输入数字与字符串)

#include<iostream>#include<fstream>	#include<cstdlib>	//support for exit()#include<string>#include<cstring>using namespace std;struct donators{	string donatorname;	double amount;};const int Size = 30;int main(){	//定义文件输入类,并与文件建立连接	ifstream inFile;	char filename[Size];	cout<<"Please enter the name of file: ";	cin>>filename;	inFile.open(filename);	if(!inFile.is_open())	{		cout<<"Can not open the file./n";		cout<<"PRogram terminating./n";		exit(EXIT_FAILURE);	}	//开始读取文件数据	int number;	inFile>>number;	inFile.get();	donators *p = new donators[number];	for(int i=0;i<number && inFile.good();i++)	{		getline(inFile,p[i].donatorname);	//ifstream定义的对象与cin用法几乎一致		inFile>>p[i].amount;		inFile.get();	}	//判断文件读取结束原因	if (inFile.eof())	//文件尾标志		cout<<"End of file reached./n";	else if(inFile.fail())	//数据不匹配错误		cout<<"Input terminated by data mismatch./n";	else		cout<<"Input terminated for unknow reason./n";	inFile.close();	//输出重要捐献者	int flag1 = 0;	cout<<"Grand Patrons:/n";	for(int i=0;i<number;i++)	{		if(p[i].amount>10000)		{			cout<<p[i].donatorname<<"/t"<<p[i].amount<<endl;			flag1++;		}	}	if (flag1<=0)		cout<<"none./n";	//此种类别没有捐献者	//输出普通捐献者	flag1 = 0;	cout<<"Patrons:/n";	for(int i=0;i<number;i++)	{		if(p[i].amount<=10000)		{			cout<<p[i].donatorname<<"/t"<<p[i].amount<<endl;			flag1++;		}	}	if (flag1<=0)		cout<<"none./n";	return 0;}

OVER!


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选