我是c ++的新手,我真的很困惑从文件中读取/写入我知道有两种类型的文件:连续访问和直接访问。我有一个名为的结构在学校描述科目并且有3个成员数据 - 名称(主题名称),标记和评论的调查。我必须创建具有直接访问(.dat文件)的文件,其中每个文件呈现一个带有标记的主题(如果它有多个)和主题的注释,所以如果我有5个不同的主题我必须有5个不同的.dat文件。我必须从.dat文件中读取并制作包含主题名称的1 .txt文件,所有用逗号分隔的标记和该主题的注释。我试图写一些东西,但是当我编译它时它不会发生任何它只能制作.dat文件,但它不会制作.txt文件?有人可以帮助我真的不明白为什么这不起作用。这是我的代码:
struct Survey{
string name;
int mark;
char comment[100];
};
void Outline(ostream& f,Survey &s){
f << s.mark << setw(16) << s.comment << endl;
}
void create(ofstream& f){
Survey s[7] = { {"EAI", 5, "The_professor_is_dude!"},
{"EAI" ,4 ,"Will_we_use_in_a_real_life?"},
{"OOP", 5, "When_u_begin_to_do_projects_its_a_magical"},
{"DIS" ,4, "I_know_only_integrals"},
{"OOP", 6 ,"Its_a_little_interesting."},
{"DIS", 3 , "Its_a_hell"},
{"UP" ,2 ,"I_don't_understand_anything"} };
string fname;
string tmp = ".dat";
string a[4] = {"UP", "OOP", "DIS", "EAI" };
for(int j=0;j<4;j++){
fname = a[j] + tmp;
f.open(fname, ios::ate);
int k = 0;
for(int i=0;i<7;i++){
if(fname.compare(s[i].name) == 0){
f.seekp(k*sizeof(Survey));
f.write(reinterpret_cast<const char*>(&s[i]),sizeof(Survey));
k++;
}
}
f.close();
}
}
void TextFile(){
ofstream outf("print.txt");
ifstream f;
string a[4] = {"UP", "OOP", "DIS", "EAI" };
string name;
string tmp = ".dat";
Survey s;
for(int i=0;i<4;i++){
name = a[i] + tmp;
f.open(name, ios::in);
f.seekg(0);
f.read(reinterpret_cast<char*>(&s),sizeof(Survey));
while(f.good()){
Outline(outf,s);
f.read(reinterpret_cast<char*>(&s),sizeof(Survey));
}
f.close();
}
}