I'm having problems reading from a binary file. Help please. Codes in comments.

//function to store created product information void inputProductInfo(string productCode,string productDesc,int tDay,string strMth,int tYr,int tQty,int tPStatus,double tPrice,double tDiscount) { product pdt; fstream pFile;

pdt.pdtCode=productCode;
pdt.pdtDesc=productDesc;
pdt.pdtDate.day=tDay;
pdt.pdtDate.mth=strMth;
pdt.pdtDate.yr=tYr;
pdt.pdtQty=tQty;
pdt.pdtPrice=tPrice;
pdt.pdtDiscount=tDiscount;

switch(tPStatus)
{
    case 1:pdt.stock=available;
        break;
    case 2:pdt.stock=noStock;
        break;
    case 3:pdt.stock=notForSale;
        break;
}
pFile.open("pFile.dat",ios::out | ios::in | ios::binary);
pFile.seekp(0, ios::end);
pFile.write(reinterpret_cast<char*>(&pdt),sizeof(pdt));
pFile.close();

}

void queryProductInfo(int pFileSize) { string sPdtCode; int whileOk=0; fstream pFile; product pdt; int i=0;

pFile.open ("pFile.dat", ios :: in | ios :: binary);

cout<<"Enter product code: ";
cin.clear();
cin.ignore (INT_MAX, '\n');
cin>>sPdtCode;

//loops as long as productCode does not satisfy 4 numerical digits and reusing productCode
while(whileOk!=1)
{
    if(sPdtCode.size()!=4 || cmpPCode(sPdtCode)==false)
    {
        whileOk=0;
        cout<<"Product code is limited to 4 numerical digits, please try again"
            <<"\nProduct code: ";
        cin>>sPdtCode;
    }
    else
    {
        whileOk++;
    }   
}

pFile.seekg(0, ios::beg);
    while(pFile.read(reinterpret_cast <char*>(&pdt), sizeof(pdt)))
{
    if (sPdtCode==pdt.pdtCode)
    {
        pFile.close ();
    }               
}

// This if- else is used to print out the table if the subject exist
if (sPdtCode==pdt.pdtCode)
{
         displayProduct(pdt);
}

else
{
    cout << "product code not found" << endl;
}

}

void displayProduct(product& pdt) {

cout<<"Date created: "<<pdt.pdtDate.day<<" "<<pdt.pdtDate.mth<<" "<<pdt.pdtDate.yr
    <<"\nProduct code: "<<pdt.pdtCode
    <<"\nDescription: "<<pdt.pdtDesc
    <<"\nQuantity available: "<<pdt.pdtQty
    <<"\nUnit price: ";
cout<<setprecision(2)<<fixed<<pdt.pdtPrice;
cout<<"\nDiscount: ";
cout<<setprecision(1)<<fixed<<pdt.pdtDiscount;
switch(pdt.stock)
{
    case 1:cout<<"Status: Avilable";
        break;
    case 2:cout<<"Status: No stock";
        break;
    case 3:cout<<"Status: Not for sale";
        break;
}

}

/r/cpp_questions Thread