小弟我想问一下。这个如何会死循环呢?

我想问一下。这个怎么会死循环呢??
#include"Hardwaredata.h"

#include<iostream>
using namespace std;

#include<fstream>
using std::ofstream;
using std::fstream;
using std::ifstream ;

#include<iomanip>
using namespace std;

#include<cstdlib>
using std::exit;
void outputLine(ostream&,const Hardwaredata&);

int main()
{
int record;
char name[15];
int count;
double price;
ofstream outhardware1("hardware.dat",ios::binary);

if( !outhardware1 )
{
cerr<<"Filed could not be opened."<<endl;
exit(1);
}

Hardwaredata blankhardware;
for( int i=0;i<100;i++ )
outhardware1.write ( reinterpret_cast< const char* >( &blankhardware ),sizeof( Hardwaredata ) );


fstream outhardware( "hardware.dat", ios::in | ios::out | ios::binary );

cout<<"Enter record number 1 to 100,0 to end input. \n";


Hardwaredata hardware;
cin>>record;

while( record>0 && record<=100 )
{
cout<<"Enter name, count of hardware, and the price.";
cin>>setw(15)>>name;
cin>>count;
cin>>price;

hardware.setrecordnumber ( record );
hardware.setname ( name );
hardware.setcount ( count );
hardware.setprice ( price );

outhardware.seekp ( ( hardware.getrecordnumber()-1 )*sizeof( Hardwaredata ) );
outhardware.write ( reinterpret_cast<const char*>( &hardware ),sizeof( Hardwaredata ) );


cout<<"Enter record number\n.";
cin>>record;
}
ifstream inhardware("hardware.dat",ios::in);
if(!inhardware)
{
cerr<<"File could not be opened."<<endl;
exit(1);
}
cout<<left<<setw(10)<<"Record#"<<setw(16)<<"Tool name"<<setw(11)<<"Quantity"<<left<<setw(10)<<right<<"Cost"<<endl;
inhardware.read(reinterpret_cast<char*>(&hardware),sizeof(Hardwaredata));

while(inhardware && !inhardware.eof())
{
if(hardware.getrecordnumber ()!=0)
outputLine(cout,hardware);
inhardware.read(reinterpret_cast<char*>(&hardware),sizeof(Hardwaredata));
}

return 0;
}
void outputLine(ostream &output,const Hardwaredata &record)
{
output<<left<<setw(10)<<record.getrecordnumber ()<<setw(16)<<record.getname ()<<setw(11)<<record.getcount ()<<setw(10)<<setprecision(2)<<right<<fixed<<showpoint<<record.getprice ()<<endl;
}

------解决方案--------------------
好像就只有一个while循环吗?不会死循环的,是你自己输入record的,你不想继续的话就直接输入不符合
 record>0 && record<=100的数吧。不过如果你输入的数据和你数据类型不一样的话,可能导致cin出错,从而死循环。那么你需要添加句
C/C++ code

    if (cin.fail())
    {
        cin.clear();
        cin.sync();
    }