В этой программе я хочу перейти к определенному местоположению в файле и прочитать там.Чтение и запись не работают одновременно
Если это место там, я напишу свой буфер там еще, я хочу найти следующее «пустое пространство». Теперь проблема заключается в тех строках, где я написал в комментариях put 2 lines under comment from here
. Если я включу эти строки, выходной файл будет пустым. Если я удалю эти 2 строки, он правильно пишет файл. Но я хочу прочитать перед тем, как писать.
И этими двумя строками кода я могу читать. Итак, можете ли вы предложить мне какой-либо альтернативный способ чтения, чтобы файл-буфер попадал в выходной файл после чтения и не оставался пустым.
Или что я здесь делаю неправильно?
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
//moving the seekp pointer of the fstream
void seek_key(fstream &fout,int k){
if(k==0)
fout.seekp(0,ios::beg);
else{
k=((k*2)-1)+(k*42);
fout.seekp(k,ios::beg);
}
}
//moving the seekg pointer of fstream
void seec_key(fstream &fout,int k){
if(k==0)
fout.seekg(0,ios::beg);
else{
k=((k*2)-1)+(k*42);
fout.seekg(k,ios::beg);
}
}
//to put n spaces in the file so that later i can put record in that location
//actually doing hashing files
void make_file(fstream &fout,int n){
int i;
i=n;
i--;
while(i>0){
for(int j=0;j<42;j++)
fout<<" ";
fout<<"\n";
i--;
}
}
struct student{
string roll;
string name;
string cgpa;
};
class buffer{
public:
string buf;
void pack(student s);
void unpack(istream fin,student s);
};
void buffer::pack(student s){
buf=s.roll;
buf=buf+"|";
buf=buf+s.name;
buf=buf+"|";
buf=buf+s.cgpa;
buf=buf+"|";
}
//cin overloading to get input into student structure
istream &operator >> (istream &in,student &s){
cout<<"enter student name: ";
in>>s.name;
cout<<"enter student roll: ";
in>>s.roll;
cout<<"enter cpga: ";
in>>s.cgpa;
}
//for adding student buffer into the file
void add(fstream &fout,buffer &b,student &s,int k){
int key=atoi(s.roll.c_str());
int v=key%k;
char test;
seek_key(fout,v);
seec_key(fout,v);
// put 2 lines under comments from here
fout>>test;
cout<<"this is test."<<test<<".test"<<endl;
fout<<b.buf;
}
int main(){
student s;
buffer b;
fstream fout;
fout.open("hash.txt");
int n;
cout<<"enter the no. of records: ";
cin>>n;
make_file(fout,n);
char ans;
do{
cin>>s;
b.pack(s);
add(fout,b,s,n);
cout<<"to enter more students press y else n";
cin>>ans;
}while(ans=='y'||ans=='Y');
fout.close();
return 0;
}
, даже если я добавляю seek_key (fout, v); после fout >> test; для перемещения seekp он будет равен -1 и не будет идти в соответствии с моей функцией seek_key.Что происходит сейчас? –
@ user2718205: было прочитано успешно (вы должны убедиться, что все операции чтения в любом случае успешны)? В противном случае поток перешел в режим сбоя (отклоненный от диаграммы состояния ...), в этот момент он ничего не сделает, пока не появится сообщение об ошибке «clear()». –
теперь он работает хорошо после выполнения clear(). Благодарю. –