首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个关于猜数字的小游戏程序解决方案

2012-02-08 
一个关于猜数字的小游戏程序#includestdafx.h #includeiostream#includetime.h usingnamespacestdc

一个关于猜数字的小游戏程序
#include   "stdafx.h "
#include   <iostream>
#include   "time.h "
using   namespace   std;

class   Guess_Num
{
public:
Guess_Num();
~Guess_Num();
void   compare(int,int);
int   generate_random();
int   get_input();
private:
int   ran;
};
void   Guess_Num::compare(int   num,int   random)
{
if(num> random)
cout < < "你猜的数比真实值要大,请继续输入.\n ";
else  
if(num <random)
cout < < "你猜的数比真实值要小,请继续输入.\n ";
else  
if(num==random)
cout < < "你太聪明了,猜对了! ";
else  
cout < < "i 'm   afraid   you 've   made   a   wrong   input.\n ";
return;
}

int   Guess_Num::generate_random()
{
//int   ran;
srand((unsigned)time(NULL));
ran=rand()%100;
return   ran;
}
int   Guess_Num::get_input()
{
int   input_num;
cin> > input_num;
return   input_num;
}
int   _tmain(int   argc,   _TCHAR*   argv[])
{
Guess_Num   gn;
int   random,input;
int   calculator=0;
random=gn.generate_random();
cout < < "请输入你所猜的数字(介于0-100之间):\n ";
do
{
input=gn.get_input();
gn.compare(input,random);
calculator++;
cout < < "你现在总共猜了 " < <calculator < < "次\n ";
        }while(input!=random);

        return   0;
}

这个程序是看了网上一个小游戏的程序,就是电脑随机产生一个100内的随机数,然后让用户输入数字,如果不一致就告诉是大是小,如果一致就中止.我写的这个程序如果不用类和对象可以很好的实现,但是定义了类后就出现了一些问题,估计是因为我对类和对象的具体用法还不是很明晰,希望诸位大虾帮我看看问题出在哪里...谢谢.

[解决办法]
Guess_Num();
~Guess_Num();
改为
Guess_Num(){}
~Guess_Num(){}
即可正确运行
[解决办法]
这个涉及到cin 流的内部结构,其实我刚开始也被这个问题困扰,在输入int的时候输入非数字类型会导致缓冲区内的内容不会消除,而且int类型变量也不会被赋值. 包括其他类型的输入也是这样,如果cin 不能将其转换为合适的数据,那么就会不进行任何操作.
所以发现数据有问题的时候要清理缓冲区,输入失败时可以检测 cin.fail(),以下是修改后的代码,我是建立空控制台工程,没有使用预编译头
#include <iostream>
#include "time.h "
using namespace std;

class Guess_Num
{
public:
Guess_Num(){};
~Guess_Num(){};
void compare(int,int);
int generate_random();
int get_input();
private:
int ran;
};
void Guess_Num::compare(int num,int random)
{
if (cin.fail())//这里就是清理缓冲区的方法
{
cin.clear();
char buffer[1024];
cin> > buffer;
}

if(num> random && num <100)//检测时包括边界,这样就能区分正确与错误的数据
{
cout < <num;
cout < < "你猜的数比真实值要大,请继续输入.\n ";
}
else if(num > = 0 && num <random)
{
cout < <num;
cout < < "你猜的数比真实值要小,请继续输入.\n ";
}
else if(num==random)
{
cout < <num;
cout < < "你太聪明了,猜对了! ";
}
else
{
cout < < "i 'm afraid you 've made a wrong input.\n ";
}

return;
}

int Guess_Num::generate_random()
{
//int ran;
srand((unsigned)time(NULL));
ran=rand()%100;
return ran;


}
int Guess_Num::get_input()
{
int input_num = -1;//设置初始数据
cin> > input_num;
return input_num;
}
int main(int argc, char* argv[])
{
Guess_Num gn;
int random,input;
int calculator=0;
random=gn.generate_random();
cout < < "请输入你所猜的数字(介于0-100之间):\n ";
do
{
input=gn.get_input();
gn.compare(input,random);
calculator++;
cout < < "你现在总共猜了 " < <calculator < < "次\n ";
}while(input!=random);

return 0;
}

热点排行