infantheartlyje 0 Light Poster

Hi i could not specific Record from my binary file. This is the method to list out all records.

int student :: showall(fstream &fp)
{
	student rec;
	fp.seekg(0,ios::beg);
	int i=0;
	cout<<"Position\tRoll No\t\tName\tBalance"<<endl;
	while(fp.read((char*)&rec,sizeof rec))
 	{	
		cout<<i*sizeof rec<<"\t";
		rec.show();
		i++;
	}
}

While running this i got the below output

Position Roll No Name Balance
0 1 Heartly 10
28 2 Heartly 20
56 3 Heartly 30
84 4 Heartly 40
112 5 Heartly 50
140 6 Heartly 60
168 7 Heartly 70
196 8 Heartly 80
224 9 Heartly 90
252 10 Heartly 100

Now i want to search specific record. I gave RecNo 5 to search. This is my View method

int student :: view(fstream &fp,int RecNum)
{
	student rec;
	std::ios::pos_type SearchPosition = RecNum*sizeof rec;
	cout<<endl<<"Position="<<SearchPosition<<endl;
	if( fp.seekg(SearchPosition) == 0 )
	{
		cout<<endl<<"Position="<<SearchPosition<<endl;
        	if(fp.read((char*)&rec,sizeof rec))
            		rec.show();
		else
			cout<<endl<<"Read Error .. ! "<<endl;
    	}
	else
	{
		cout<<endl<<"Record Number Not Found"<<endl;
	}	
}

After running this method , i got below result.

Record number (-1 Cancels):
5

Position=140

Record Number Not Found

Why it is not locating the specific Record?
I also given below my coding of calling the method

printf("\nMenu : AddDummy, Add, View, Edit, List or Quit ( U, A, V, E, L or Q) : ");
     switch(toupper(getchar()))
     { 
	case 'U' :
	        file.open("abc.cli",ios::in|ios::out|ios::binary|ios::app);
                cout<<"Creating dummy file of 1000 entries"<<endl;
                record.adddummy(file);
	        file.clear();
                break;
        case 'A' :
		file.open("abc.cli",ios::in|ios::out|ios::binary|ios::app);
              	record.get();
		record.add(record,file);
         	cout<<"Record Added"<<endl;
		file.clear();
         	break;              
        case 'E' :
		file.open("abc.cli",ios::in|ios::out|ios::binary|ios::ate);
              	cout<<endl<<"Record number (-1 Cancels): "<<endl;
              	cin>>Rec;
              	if (Rec > -1)
		{
                	record.get();
			if(!record.update(record,file,Rec))
				cout<<"Record Edited"<<endl;
			else
    				cout<<"Record Edited Failed"<<endl;
			file.clear();
		}              			
		break;
        case 'V' :
		file.open("abc.cli",ios::in|ios::out|ios::binary|ios::ate);
            	cout<<endl<<"Record number (-1 Cancels): "<<endl;
              	cin>>Rec;
              	if (Rec > -1)
                	record.view(file,Rec);
		file.clear();
              	break;
        case 'L' :
		file.open("abc.cli",ios::in|ios::out|ios::binary|ios::ate);
              	record.showall(file);
		file.clear();
              	break;
	case 'Q' :
              	file.close();
		return 0; 
	default :
			cout<<" \nNot Matching\n ";
	}while(getchar() != '\n');

Why its not reading the specific Record?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.