一个关于猜数字的小游戏程序
#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;
}