Chào mọi người , do em mới học về file của c++ nên chưa hiểu rõ .Cao nhân nào có thể trả lời cho em với ,em cảm ơn
Câu hỏi thứ nhất của em là:tại sao khi goi hàm void doctep thì chỗ struct lại dùng toán tử * chứ ko phải là toán tử &
câu hỏi thứ hai: Trong hàm void doctep thì sau khi kết thúc hàm thì ko thể đóng lại tệp ạ?
code:
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#include<string>
typedef struct canbo
{
char ma[10];
char ho[10];
char ten[10];
float luong;
};
void doctep(canbo *x,int &a)
{
fstream file("canbo.txt",ios::in);
if(!file)
{
cout<<"khong the mo duoc tep!"<<endl;
exit(1);
}
file>>a;
for(int i=0;i<a;i++)
{
file>>x[i].ma;
file>>x[i].ho;
file>>x[i].ten;
file>>x[i].luong;
}
}
void output(canbo*x,int a)
{
cout << "--------------------------------------------------" << endl;
cout<<left;
cout<<"| "<<setw(10)<<"ma cb"<<"| "<<setw(10)<<"ho "<<"| ";
cout<<setw(10)<<"ten"<<"| "<<setw(10)<<"luong"<<"|"<<endl;
for(int i=0;i<a;i++)
{
cout<<"| "<<setw(10)<<x[i].ma<<"| "<<setw(10)<<x[i].ho<<"| ";
cout<<setw(10)<<x[i].ten<<"| "<<setw(10)<<x[i].luong<<"|"<<endl;
}
cout << "--------------------------------------------------" << endl;
}
void sapxep(canbo*x,int a)
{
canbo tg;
for(int i=0;i<a;i++)
{
for(int j=i+1;j<a;j++)
{
if(strcmp(x[i].ten,x[j].ten)<0)
{
tg=x[i];
x[i]=x[j];
x[j]=tg;
}
}
}
}
void ghi_luong10(canbo*x,int a)
{
fstream file("canbo.txt",ios::out|ios::app);
if(!file)
{
cout<<"khong the tao duoc teo"<<endl;
exit(1);
}
file<<"nhung can bo co luong tren 10 trieu la:\n";
for(int i=0;i<a;i++)
{
if(x[i].luong>10000000)
{
file<<x[i].ma<<"\t";
file<<x[i].ho<<"\t";
file<<x[i].ten<<"\t";
file<<x[i].luong<<"\n";
}
}
file<<"\ncan bo theo ten giam dan la:\n";
for(int i=0;i<a;i++)
{
file<<x[i].ma<<"\t";
file<<x[i].ho<<"\t";
file<<x[i].ten<<"\t";
file<<x[i].luong<<"\n";
}
file.close();
}
int main()
{
canbo cb[10];
int n;
doctep(cb,n);
output(cb,n);
sapxep(cb,n);
ghi_luong10(cb,n);
return 0;
}