今天写程序,主程序和ADDBOOK中都有cin的while循环,发现按ctrl+d或ctrl+z都会全部退出两个while循环!!
解决方法:
http://codingforums.com/showthread.php?t=167731
Yes you can flush the user input.
Code:
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
就完美解决了,呵呵!!
证明还是不太清楚啊。。。。。
void main()
{
/*µÚÒ»²¿·Ö£¬Ó¦¸Ãд³öÒ»¸ö»¶Ó½çÃæ*/
FunctionWelcome();
InitBookInfo();
int funChoose =0;
while(cin>>funChoose)
{
switch(funChoose)
{
case FUN_BORROW:
//µ÷Óù¦ÄÜÄ£¿é1.ͼÊé½èÔÄ
FunctionBorrow();
system("cls");
FunctionWelcome();
break;
case FUN_QUERY:
//µ÷Óù¦ÄÜÄ£¿é2.ͼÊé²éѯ
FunctionQuery();
system("cls");
FunctionWelcome();
break;
case FUN_ADDUSER:
FunctionAddUser();
system("cls");
FunctionWelcome();
break;
case FUN_ADDBOOK:
FunctionAddBook();
//system("cls");
FunctionWelcome();
//funChoose=10;
break;
case FUN_EXIT:
//µ÷Óù¦ÄÜÄ£¿é0.Í˳ö±¾ÏµÍ³
exit(0);
break;
default:
system("cls");
cout<<"ÄúÊä´íÁ˰ɣ¿"<<endl;
FunctionWelcome();
break;
}
}
}
int FunctionAddBook()
{ cout<<"¹¦ÄÜ"<<FUN_ADDBOOK<<".Ìí¼ÓͼÊé"<<endl;
cout<<"coming soon!(2010-9-17)"<<endl;
FunctionTestBookInfo("BookInfo.Dat");
char fileName[30];
ofstream outstuf; //
cout<<"Please input the name of BookInfo file(Default BookInfo.dat):/n";
cin>>fileName;
outstuf.open(fileName, ios::out);
if(!outstuf)
{
cerr<<"File could not be open."<<endl;
abort();
}
outstuf<<"This is a file of Books Information/n";
cout<<"Input the BookId, BookName, and BookNum:(Enter Ctrl-Z to end input)/n?";
int BookId;
char BookName[40];
int BookNum; //ͼÊéĿǰ¿É½èÔÄÊýÁ¿
cout<<"ÇëÊäÈ룺/tBookId/tBookName/tBookNum(ÒÔ¿Õ¸ñ¼ä¸ñ)"<<endl;
int i=0;
while(cin>>BookId >> BookName >> BookNum)
{
int exist=0;//ͼÊé´æÔÚ·ñ£¬Ä¬ÈÏΪ²»´æÔÚ
for(i=0; i<=bookIdTotal; i++)
{
//Èç¹ûÊäÈëµÄͼÊéIDÊÇ´æÔڵģ¬ÄÇô£¬¾Í±íÃ÷Óû§ÊÇÏëÐ޸ĸÃͼÊéµÄÐÅÏ¢
if(m_bookInfo[i].BookId==BookId)
{
exist=1;
cout<<"BookId="<<m_bookInfo[i].BookId<<".["<<m_bookInfo[i].BookName<<"]"<<"µÄÐÅÏ¢½«ÒªÐ޸ģ¬È·¶¨Âð£¿"<<endl;
char judge;//ÅжÏÊÇ·ñÒªÐÞ¸Ä
cin>>judge;
if('y'==judge || 'Y'== judge)
{
strcpy(m_bookInfo[i].BookName,BookName);
m_bookInfo[i].BookNum=BookNum;
cout<<"Ð޸ijɹ¦!"<<endl;
}
else
{
cout<<"ûÓÐÐÞ¸Ä!"<<endl;
}
}
}
//Èç¹ûÇ°ÃæÃ»ÓÐÈκÎÒ»±¾Í¼ÊéIDÏàͬ£¬Ôò×·¼ÓÒ»Ìõ¼Ç¼£¡
if(!exist)
{
bookIdTotal++;
cout<<"ûÓвéÕÒµ½¼º´æÔڵļǼ!Ìí¼Óµ½BookInfo.datÎļþµÄδβ!"<<endl;
m_bookInfo[bookIdTotal].BookId=BookId;
strcpy(m_bookInfo[bookIdTotal].BookName,BookName);
m_bookInfo[bookIdTotal].BookNum=BookNum;
}
}
/*
int BookId;
char BookName[40];
int BookNum; //ͼÊéĿǰ¿É½èÔÄÊýÁ¿
*/
cout<<"ÊäÈë½áÊø£¬ÏÂÃæ°Ñm_bookInfo[100]ÖеÄÊý¾ÝдÈë:"<<fileName<<endl;
for(i=0 ; i<=bookIdTotal; i++)
{
cout<<"дÈë:"<<m_bookInfo[i].BookId<<endl;
cout<<m_bookInfo[i].BookId<<' '<<m_bookInfo[i].BookName
<<' '<<m_bookInfo[i].BookNum<<'/n';
outstuf<<m_bookInfo[i].BookId<<' '<<m_bookInfo[i].BookName
<<' '<<m_bookInfo[i].BookNum<<'/n';
}
outstuf.close();
cout<<"Ìí¼Ó½áÊø!ÏÖÔÚ¼ì²éÎļþÊäÈëÇé¿ö!"<<endl;
FunctionTestBookInfo(fileName);
cout<<"°´ÈÎÒâ¼ü£¬»Ø³µ£¬·µ»ØÖ÷³ÌÐò!"<<endl;
//cin.clear();
//cin.setstate()
//cin.setstate(cin.good());
//cin.setstate(ios::)
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
int wait;
cin>>wait;
cout<<wait<<endl;
return 0 ;
}