![]() |
#2
rjsp2019-10-18 08:59
首先出题者的专业水平不行,存储文件中 struct billion 使用 int 类型,而 int 在标准中只要求其不小于2字节,在已知的编译器中,它可能是2字节、4字节、8字节;除此之外,结构体还有字节对齐问题,不同的编译器包括同一个编译器的不同编译选项都可能影响到它。
其次,出题者在专业知识之外也是个稀里糊涂的混混儿。“调用find_billion(“China”, 38, 45),打印出满足要求的所有富翁。”请问是什么条件,是它小姨子的腰围胸围必须是38和45吗? ![]() #include <iostream> #include <fstream> #include <vector> #include <algorithm> #include <cstring> using namespace std; struct billion { int no; char name[20]; char account[6]; int age; char company[20]; char country[20]; }; int main( void ) { vector<billion> bs; { ifstream file( "billion.bin" ); if( !file ) { cerr << "the file open failed.\n"; return 1; } for( billion b; file.read((char*)&b,sizeof(b)) && file.gcount()==sizeof(b); ) bs.push_back( b ); } class find_billion { public: find_billion( const char* country, int minval, int maxval ) : minval_(minval), maxval_(maxval) { strcpy( country_, country ); } void operator()( const billion& b ) const { if( b.age>=minval_ && b.age<=maxval_ && strcmp(b.country,country_)==0 ) // 你得问到出题者的意图后,然后修改此句的条件 cout << b.no << ", " << b.name << ", " << b.account << ", " << b.age << ", " << << ", " << b.country << '\n'; } private: char country_[20]; int minval_, maxval_; }; for_each( bs.begin(), bs.end(), find_billion("China",60,70) ); return 0; } |
只有本站会员才能查看附件,请 登录
大家帮帮忙 新手刚开始学习 这道题做了好几天了弄不出来实验要求:
1、读取2进制文件billion.bin,形成一个vector<billion>的容器内容。
2、使用for_each遍历vector容器内所有元素,调用find_billion(“China”, 60,70 ),打印出满足要求的所有富翁。
3、上述find_billion是一个函数对象。
实验内容:
billion.bin是struct billion的2进制存储,billion的定义为:
struct billion {
int no;
char name[20];
char account[6];
int age;
char company[20];
char country[20];
};
按照要求做就可以了
[此贴子已经被作者于2019-10-17 18:45编辑过]