写的猜数字游戏编译不通
GuessNum.h
#include "stdlib.h"
#include "time.h"
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
using namespace std;
/*
猜数字的游戏.要求如下:
规则:
电脑随机生成4个数,范围1-9,比如1234。
你猜4个数,当数字相同位置相同则为一个A,当数字相同位置不同则为一个B
比如你猜2345,则是3B
你猜1398,则是1A1B
限制次数,比如只让自己猜8次
*/
class GuessNum
{
public:
GuessNum(int times); // 猜测的次数
GuessNum();
int Compare(int the_number); // 返回匹配的结果,比如1A,1A1B等等.
int Compare(char number[]);
~GuessNum(void);
private:
int _times;
char _the_number[4];
static const int RANGE_MAX = 9999;
static const int RANGE_MIN = 1000;
};
GuessNum.cpp
#include "stdafx.h"
#include "GuessNum.h"
GuessNum::GuessNum(int times)
{
srand((unsigned)time(NULL));
// 让系统多循环几次,这样取出的随机数比较的随机.
int temp_value = 0;
for(int i = 0; i < 10; i++)
{
temp_value = (int)(((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN);
}
if(temp_value > 9999)
{
temp_value -= RANGE_MIN;
}
sprintf(_the_number, "%d", temp_value);
cout << "The number is " << _the_number << endl;
_times = times;
}
GuessNum::GuessNum()
{
GuessNum(8);
}
GuessNum::~GuessNum(void)
{
}
int GuessNum::Compare(int number)
{
if(number < 1000 || number > 9999)
{
cout << "您输入的数字" << number << "是不对的,请重新输入.\n数字要求在1000和9999之间" << endl;
return -1;
}
char compare_num[4];
sprintf(compare_num, "%d", number);
Compare(compare_num);
return 0;
}
int GuessNum::Compare(char number[])
{
string result = "";
int exactly_match_number = 0;
int match_number = 0;
for(int i = 0; i < 4; i++)
{
cout << _the_number[i] << endl;
}
//cout << "The number is " << _the_number << endl;
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 4; j++)
{
if(number[i] == _the_number[j]) // 有数字的匹配
{
match_number++;
}
}
}
for(int i = 0; i < 4; i++)
{
if(number[i] == _the_number[i]) // 有完全的匹配
{
exactly_match_number++;
}
}
cout << "您输入的数字是'" << number << "',匹配的结果是 ";
if(exactly_match_number > 0)
{
cout << exactly_match_number << "A";
}
cout << match_number - exactly_match_number << "B";
cout << endl;
return 0;
}
main.cpp
#include "stdafx.h"
#include <string>
#include "GuessNum.h"
int main()
{
GuessNum* guess = new GuessNum();
cout << "请输入您想要猜测的数字" << endl;
int number;
for(int i = 0; i < 8; i++)
{
cin >> number;
guess->Compare(number);
}
}
这个程序没有办法运行.
目前遇到的问题是_the_number这个字符数组在构造函数里面赋值了之后,在Compare函数里面取_the_number值的时候确出现错误,这个问题我没有想明白.
究竟是在构造函数里面不允许这么赋值,还是有什么其他的问题?