為啥我寫入檔案的資料,和從檔案讀出的資料不一樣啊


代碼如下
#include<fstream>
#include<iostream>
#include<string>
using namespace std;
//int n=0;
struct Worker{
int num;
char name[20];
int age;
float wage;
};
void input(int n,Worker *w){
for(int i=0;i<n;i++){
cout<<"num:";
cin>>w[i].num;
cout<<"name:";
cin>>w[i].name;
cout<<"age:";
cin>>w[i].age;
cout<<"wage:";
cin>>w[i].wage;
}
}
void bubble_sort(int n,Worker*w){
Worker w1;
bool change=true;
for(int i=n-1;i>=1&&change==true;i--){
change=false;
for(int j=0;j<i;j++){
if(w[j].num>w[j+1].num){
w1=w[j];
w[j]=w[j+1];
w[j+1]=w1;
change=true;
}
}
}
}
void write_file(char* filename,Worker*w){
fstream outfile(filename,ios::out|ios::in|ios::binary);
if(!outfile){
cerr<<"open file error!"<<endl;
exit(1);
}
outfile.write((char*)w,sizeof(w));
outfile.close();
}
void show(int n,Worker*w){
for(int i=0;i<n;i++){
cout<<"num:"<<w[i].num<<endl;
cout<<"name:"<<w[i].name<<endl;
cout<<"age:"<<w[i].age<<endl;
cout<<"wage:"<<w[i].wage<<endl;
}
}
void read_file(char* filename,int n){
fstream ifile(filename,ios::out|ios::in|ios::binary);
if(!ifile){
cout<<"open ifle error!"<<endl;
exit(1);
}
Worker *w2=new Worker[n];
for(int i=0;i<n;i++){
ifile.read((char*)w2,sizeof(w2[i]));
cout<<"num:"<<w2[i].num<<endl;
cout<<"name:"<<w2[i].name<<endl;
cout<<"age:"<<w2[i].age<<endl;
cout<<"wage:"<<w2[i].wage<<endl;
}
ifile.close();
delete []w2;
}
Worker* add(int &num,Worker*w){
int num1;
if(w==NULL||num==0){
cout<<"you have not creat a list!"<<endl;
return NULL;
}
cout<<"please input number of extra workers:";
cin>>num1;
Worker *w1=new Worker[num+num1];
for(int i=0;i<num+num1;i++){
if(i>=0&&i<num){
w1[i]=w[i];
}
if(i>=num&&i<num+num1){
cout<<"num:";
cin>>w1[i].num;
cout<<"name:";
cin>>w1[i].name;
cout<<"age:";
cin>>w1[i].age;
cout<<"wage:";
cin>>w1[i].wage;
}
}
num+=num1;
return w1;
}
int main(){
int n=0;
int num=0;
Worker *w=NULL;
cout<<"worker_system"<<endl;
cout<<"1.creat"<<endl;
cout<<"2.add"<<endl;
cout<<"3.sort"<<endl;
cout<<"4.delete"<<endl;
cout<<"5.show"<<endl;
cout<<"6.exit"<<endl;
while(1){
cout<<"please your choice:";
cin>>n;
if (n==6){
break;
}
switch(n){
case 1:
//cout<<num<<endl;
if(num==0){
cout<<"please import number of worker:";
cin>>num;
w=new Worker[num];
input(num,w);
write_file("worker_sys.txt",w);
break;
}
else{
cout<<"already creat a list!"<<endl;
break;
}
case 2:
w=add(num,w);
//cout<<num;
write_file("worker_sys.txt",w);
break;
case 3:
if(num==0){
//bubble_sort(num,w);break;
cout<<"you have not creat a list!"<<endl;
break;
}
else{
bubble_sort(num,w);
break;
}
case 4:break;
case 5:
if(num==0){
cout<<"you have not creat a list!"<<endl;
break;
}
else{
read_file("worker_sys.txt",num);
break;
}
//read_file("worker_sys.txt",num);break;
default:cout<<"error";break;
}
}
return 0;
}
uj5u.com熱心網友回復:
哪里不一樣 沒看懂uj5u.com熱心網友回復:
輸入的age ,wage和輸出的age,wage 不一樣
uj5u.com熱心網友回復:
outfile.write((char*)w, sizeof(w));應該改成
outfile.write((char*)w, sizeof(*w));
uj5u.com熱心網友回復:
改了還是有問題
uj5u.com熱心網友回復:
在read_file(...)方法里,洗掉ifile.read(...)陳述句,在初始化變數w2之后,for回圈之前添加ifile.read((char*)&w2,sizeof(w2));轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/54979.html
標籤:C++ 語言
上一篇:Arduino函式
下一篇:入門 選擇排序
