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

    学习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文件内容如下:

4
Sam Stone
2000
Freida Flass
100500
Tammy Tubbs
5000
Rich Raptor
55000


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

#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!




  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值