輸入兩個資料排序之后輸出兩個相同的資料不知道為啥


代碼如下麻煩幫忙找一下bug
#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,int n,Worker*w){
fstream outfile(filename,ios::out|ios::binary);
if(!outfile){
cerr<<"open file error!"<<endl;
exit(1);
}
//outfile.write((char*)w,sizeof(w[i]));
for(int i=0;i<n;i++){
outfile.write((char*)w,sizeof(w[i]));
//cout<<i<<endl;
}
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,Worker *w){
fstream infile(filename,ios::in|ios::binary);
if(!infile){
cout<<"open ifle error!"<<endl;
exit(1);
}
//Worker *w2=new Worker[n];
//ifile.read((char*)w2,sizeof(w2));
for(int i=0;i<n;i++){
infile.read((char*)w,sizeof(w[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;
//cout<<i<<endl;
}
infile.close();
}
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 select(char*filename,int n,Worker*w){
cout<<"please input worker num:";
int num1;
cin>>num1;
if(num1==0){
return 0;
}
fstream infile(filename,ios::in|ios::binary);
if(!infile){
cout<<"open error!"<<endl;
exit(1);
}
int i;
for(i=0;i<n;i++){
infile.read((char*)w,sizeof(w[i]));
if(num1==w[i].num){
cout<<"num:"<<w[i].num<<endl;
cout<<"name:"<<w[i].name<<endl;
cout<<"age:"<<w[i].age<<endl;
cout<<"wage:"<<w[i].wage<<endl;
break;
}
}
if(i==n){
cout<<"no this person"<<endl;
}
return 0;
}
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.select"<<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",num,w);
break;
}
else{
cout<<"already creat a list!"<<endl;
break;
}
case 2:
w=add(num,w);
//cout<<num;
write_file("worker_sys.txt",num,w);
//cout<<1<<endl;
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:
if(num==0){
cout<<"you have not creat a list!"<<endl;
break;
}
else {
select("worker_sys.txt",num,w) ;
break;
}
case 5:
if(num==0){
cout<<"you have not creat a list!"<<endl;
break;
}
else{
read_file("worker_sys.txt",num,w);
break;
}
//read_file("worker_sys.txt",num);break;
default:cout<<"error";break;
}
}
delete []w;
return 0;
}
uj5u.com熱心網友回復:
寫檔案錯了,每次只寫第一個了uj5u.com熱心網友回復:
啊啥意思啊?uj5u.com熱心網友回復:
我運行一一下后面正常uj5u.com熱心網友回復:
就是前面第一個和第二個是重復的轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/54989.html
標籤:C++ 語言
