学习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;
}