关于文件读取的一点小疑点
关于文件读取的一点小问题
#include <iostream>
#include <fstream>
#include <cstdlib>
struct member
{
char name[20];
double donation;
};
int main()
{
using namespace std;
int num,count1=0,count2=0;
ifstream fin;
char file[20];
cout<<"Enter name of data file: ";
cin.getline(file,20);
fin.open(file);
if(!fin.is_open())
{
cout<<"Could not open the file-"<<file<<endl;
cout<<"Program terminating.\n";
exit(EXIT_FAILURE);
}
fin>>num;
fin.get();
member *pd=new member[num];
for(int i=0;i<num;i++)
{
fin.getline(pd[i].name,20);
fin>>pd[i].donation;
fin.get();
}
cout<<"Grand Patrons:\n";
for(int i=0;i<num;i++)
if(pd[i].donation>=10000)
{
cout<<pd[i].name<<"\n"<<pd[i].donation<<endl;
count1++;
}
if(count1==0)
cout<<"none\n";
cout<<"Patrons:\n";
for(int i=0;i<num;i++)
if(pd[i].donation<10000)
{
cout<<pd[i].name<<"\n"<<pd[i].donation<<endl;
count2++;
}
if(count2==0)
cout<<"none\n";
delete [] pd;
cin.get();
return 0;
}
文件里面是这样的
4
wang
12121
liu
230000
zhang
2222
程序的目的是找出结构体中大于20000的信息,并分成两种输出。
我不明白的是红色字体的地方,后面那个cin.get();是干啥的?为什么字符型的时候就不用了呢?整型的时候也用cin.getline();可以不?
------解决方案--------------------
fin.get()就是从fin中得到值,你可查下cin.get()的用法,它们差不多是一个意思,fin.getline(receive...)是从fin中得到一个字符串,并赋值给receive,总的来说就是从fin这个对象流中得到内容,只是一个是单个,而一个是一行
#include <iostream>
#include <fstream>
#include <cstdlib>
struct member
{
char name[20];
double donation;
};
int main()
{
using namespace std;
int num,count1=0,count2=0;
ifstream fin;
char file[20];
cout<<"Enter name of data file: ";
cin.getline(file,20);
fin.open(file);
if(!fin.is_open())
{
cout<<"Could not open the file-"<<file<<endl;
cout<<"Program terminating.\n";
exit(EXIT_FAILURE);
}
fin>>num;
fin.get();
member *pd=new member[num];
for(int i=0;i<num;i++)
{
fin.getline(pd[i].name,20);
fin>>pd[i].donation;
fin.get();
}
cout<<"Grand Patrons:\n";
for(int i=0;i<num;i++)
if(pd[i].donation>=10000)
{
cout<<pd[i].name<<"\n"<<pd[i].donation<<endl;
count1++;
}
if(count1==0)
cout<<"none\n";
cout<<"Patrons:\n";
for(int i=0;i<num;i++)
if(pd[i].donation<10000)
{
cout<<pd[i].name<<"\n"<<pd[i].donation<<endl;
count2++;
}
if(count2==0)
cout<<"none\n";
delete [] pd;
cin.get();
return 0;
}
文件里面是这样的
4
wang
12121
liu
230000
zhang
2222
程序的目的是找出结构体中大于20000的信息,并分成两种输出。
我不明白的是红色字体的地方,后面那个cin.get();是干啥的?为什么字符型的时候就不用了呢?整型的时候也用cin.getline();可以不?
------解决方案--------------------
fin.get()就是从fin中得到值,你可查下cin.get()的用法,它们差不多是一个意思,fin.getline(receive...)是从fin中得到一个字符串,并赋值给receive,总的来说就是从fin这个对象流中得到内容,只是一个是单个,而一个是一行