非常簡單的石頭,剪刀,布程序
沒有注釋且有死循環:
//?Game.cpp?:?Defines?the?entry?point?for?the?console?application.
//

#include?<math.h>
#include?<stdio.h>
#include?<iostream>

using?namespace?std;


enum?Result
{win,loss,draw};

enum?Show
{scissors,stone,cloth};

struct?CPerson


{
????Show?isWin;????
????CPerson(Show?res)

????
{
????????isWin?=?res;
????};
????Result?IsWin(?CPerson?b)


{
????Result?res?;
????
????switch(abs((int)this->isWin?-?(int)b.isWin))

????
{
????case?0:?
????????res?=?(Result)2;
????????break;
????case?1:
????????if((int)this->isWin?>?(int)b.isWin)
????????????res?=?(Result)0;
????????else?
????????????res?=?(Result)1;
????????break;
????case?2:?
????????if((int)this->isWin?>?(int)b.isWin)
????????????res?=?(Result)1;
????????else
????????????res?=?(Result)0;
????????break;
????default?:
????????break;
????}
????return?res;
};

};

int?main()


{
????cout<<"---------------------"<<endl;
????cout<<"please?input?two?int?mumbers?,it?must?be?more?equal?0?and?less??equal?2."<<endl;
????cout<<"0?is?scissors,1?is?stone,and?2?is?cloth."<<endl;
????int?a,b;
????a=?-1;b=-1;
????while(!(a>=0&&a<=2&&b<=2&&b>=0))

????
{
????cout<<"please?input?A:";
????cin>>a;
????cout<<"please?input?B:";
????cin>>b;
????}

????CPerson?personA((Show)a);
????CPerson?personB((Show)b);
????Result?result;
????result??=?personA.IsWin(personB);
????if(result?==?(Result)0)
????????cout<<"A?Win!"<<endl;
????else?if(result?==?(Result)1)
????????cout<<"B?Win!"<<endl;
????else
????????cout<<"draw"<<endl;
????cout<<"---------------------"<<endl;
????return?0;
}


修改后(加注釋后的):
//?Game.cpp?:?Defines?the?entry?point?for?the?console?application.
//

#include?<math.h>
#include?<stdio.h>
#include?<iostream>

using?namespace?std;


enum?Result
{win,loss,draw};??//?the?result?of?playing?the?game

enum?Show
{scissors,stone,cloth};?//剪刀,石頭,布

struct?CPerson


{
????Show?m_show;????//the?person's?show.?it?must?be?Show?enum?variable.
????CPerson(Show?show)

????
{
????????m_show?=?show;
????};
};
//IsWin?function?return?personA's?result.
Result?IsWin(CPerson?a?,CPerson?b)


{
????Result?res?;
????
????switch(abs(a.m_show?-?b.m_show))

????
{
????case?0:?//personA?and?personB?are?equal.
????????res?=?draw;
????????break;
????case?1://personA?and?PersonB?are?closed.
????????if(a.m_show?>?b.m_show)
????????????res?=?win;
????????else?
????????????res?=?loss;
????????break;
????case?2:?//personA?and?personB?are?distant.
????????if(a.m_show?>?b.m_show)
????????????res?=?loss;
????????else
????????????res?=?win;
????????break;
????default?:
????????break;
????}
????return?res;
};
int?main()


{
????cout<<"---------------------"<<endl;
????cout<<"please?input?two?int?mumbers?,it?must?be?more?equal?0?and?less??equal?2."<<endl;
????cout<<"0?is?scissors,1?is?stone,and?2?is?cloth."<<endl;
????int?a,b;
????a=?-1;b=-1;
????while(!(a>=0&&a<=2&&b<=2&&b>=0))

????
{
????cout<<"please?input?A:";????
????cin>>a;
????cout<<"please?input?B:";????
????cin>>b;
????}

????CPerson?personA((Show)a);
????CPerson?personB((Show)b);
????Result?result;
????result??=?IsWin(personA,personB);

????if(result?==?(Result)0)
????????cout<<"A?Win!"<<endl;
????else?if(result?==?(Result)1)
????????cout<<"B?Win!"<<endl;
????else
????????cout<<"draw"<<endl;
????cout<<"---------------------"<<endl;
????return?0;
}

可是如果輸入字符還是死循環..............
最后的終于正確了的:
主要是要檢查cin的結果,用cin.good()或cin.fail()
用cin.clear() 和fflush(stdin) 來重新初始化cin .........
以下是新的代碼:
//?Game.cpp?:?Defines?the?entry?point?for?the?console?application.
//

#include?<math.h>
#include?<stdio.h>
#include?<iostream>

using?namespace?std;


enum?Result
{win,loss,draw};??//?the?result?of?playing?the?game

enum?Show
{scissors,stone,cloth};?//剪刀,石頭,布

struct?CPerson


{
????Show?m_show;????//the?person's?show.?it?must?be?Show?enum?variable.
????CPerson(Show?show)

????
{
????????m_show?=?show;
????};
};
//IsWin?function?return?personA's?result.
Result?IsWin(CPerson?a?,CPerson?b)


{
????Result?res?;
????
????switch(abs(a.m_show?-?b.m_show))

????
{
????case?0:?//personA?and?personB?are?equal.
????????res?=?draw;
????????break;
????case?1://personA?and?PersonB?are?closed.
????????if(a.m_show?>?b.m_show)
????????????res?=?win;
????????else?
????????????res?=?loss;
????????break;
????case?2:?//personA?and?personB?are?distant.
????????if(a.m_show?>?b.m_show)
????????????res?=?loss;
????????else
????????????res?=?win;
????????break;
????default?:
????????break;
????}
????return?res;
};
int?main()


{
????cout<<"---------------------"<<endl;
????cout<<"please?input?two?int?mumbers?,it?must?be?more?equal?0?and?less??equal?2."<<endl;
????cout<<"0?is?scissors,1?is?stone,and?2?is?cloth."<<endl;
????int?a,b;
????a=?-1;b=-1;
????while(1)

????
{
????????cin.clear();
????????fflush(stdin);
????????cout<<"input?A"<<endl;
????????cin>>a;
????????if(!(a>=0&&a<=2)||!cin.good())

????????
{
????????????cerr<<"input?error!"<<endl;????????????????
????????????continue;
????????}
????????cout<<"input?B"<<endl;
????????cin>>b;
????????if(!(b>=0&&b<=2)||!cin.good())

????????
{
????????????cerr<<"input?error!"<<endl;????????????????????
????????????continue;
????????}????
????????CPerson?personA((Show)a);
????????CPerson?personB((Show)b);
????????Result?result;
????????result??=?IsWin(personA,personB);

????????if(result?==?(Result)0)
????????????cout<<"A?Win!"<<endl;
????????else?if(result?==?(Result)1)
????????????cout<<"B?Win!"<<endl;
????????else
????????????cout<<"draw"<<endl;
????????cout<<"---------------------"<<endl;
????}
????return?0;
}
































































































修改后(加注釋后的):






























































































最后的終于正確了的:
主要是要檢查cin的結果,用cin.good()或cin.fail()
用cin.clear() 和fflush(stdin) 來重新初始化cin .........
以下是新的代碼:













































































































posted on 2006-06-24 14:33 夢在天涯 閱讀(1995) 評論(5) 編輯 收藏 引用 所屬分類: CPlusPlus