#include<iostream> #include<fstream> using namespace std; struct people{ int gonghao; char name[10]; char bumen[10]; int salary; }; int main() { int i=0,j,n=0; people p[20],q; ifstream ifs,ifa; ofstream ofs; ifs.open("a.txt",ios::in); while(!ifs.eof()) { ifs>>p[i].gonghao>>p[i].name>>p[i].bumen>>p[i].salary; i++; n++; } ifs.close(); ifa.open("b.txt",ios::in); while(!ifa.eof()) { ifa>>p[i].gonghao>>p[i].name>>p[i].bumen>>p[i].salary; i++; n++; } ifa.close(); for(i=0;i<n-1;i++) printf("%d %s %s %d\n",p[i].gonghao,p[i].name,p[i].bumen,p[i].salary); for(i=0;i<n;i++) { for(j=1;j<n;j++) { if(p[i].salary<p[j].salary) { q=p[j]; p[j]=p[i]; p[i]=q; } } } for(i=0;i<n;i++) printf("%d %s %s %d\n",p[i].gonghao,p[i].name,p[i].bumen,p[i].salary);
时间: 2024-03-25 07:36:49 浏览: 132
#include <iostream>
这段代码的作用是读取两个文件中的员工信息,将它们合并到一个结构体数组 `p` 中,并按照薪资从低到高排序后输出。但是,这个代码也存在一些问题:
1. 文件读取时应该使用 `ifstream` 类型打开文件,而不是 `ofstream` 类型。
2. 在读取文件时,使用 `while(!ifs.eof())` 的方式往往会造成最后一行信息重复读取的问题。应该使用 `while(ifs>>p[i].gonghao>>p[i].name>>p[i].bumen>>p[i].salary)` 的方式来读取文件。
3. 在排序时,应该将内层循环的起始值 `j` 赋值为 `i+1`,而不是 `1`。
下面是修改后的代码:
```c++
#include<iostream>
#include<fstream>
using namespace std;
struct people{
int gonghao;
char name[10];
char bumen[10];
int salary;
};
int main() {
int i=0,j,n=0;
people p[20],q;
ifstream ifs,ifa;
ofstream ofs;
ifs.open("a.txt",ios::in);
while(ifs>>p[i].gonghao>>p[i].name>>p[i].bumen>>p[i].salary) {
i++;
n++;
}
ifs.close();
ifa.open("b.txt",ios::in);
while(ifa>>p[i].gonghao>>p[i].name>>p[i].bumen>>p[i].salary) {
i++;
n++;
}
ifa.close();
for(i=0;i<n-1;i++)
printf("%d %s %s %d\n",p[i].gonghao,p[i].name,p[i].bumen,p[i].salary);
for(i=0;i<n;i++) {
for(j=i+1;j<n;j++) {
if(p[i].salary>p[j].salary) {
q=p[j];
p[j]=p[i];
p[i]=q;
}
}
}
for(i=0;i<n;i++)
printf("%d %s %s %d\n",p[i].gonghao,p[i].name,p[i].bumen,p[i].salary);
return 0;
}
```
阅读全文