尝试创建乐透游戏,执行和编译有问题
Posted
技术标签:
【中文标题】尝试创建乐透游戏,执行和编译有问题【英文标题】:Trying to create lotto game, having problems with execution and compilation 【发布时间】:2019-10-04 19:09:45 【问题描述】:我正在尝试设置一个彩票游戏,该游戏要求用户输入 3 次并将其与随机数组绘制的数字进行比较。如果这些用户号码中的任何一个与数组中的号码匹配,程序应该打印出匹配的号码。
我尝试在我的主函数中使用 while 循环来控制流程,但我仍然遇到编译问题
#include<iostream>
#include <ctime>
#include "array.h"
using std::cout; using std::cin; using std::endl;
const int sizeofArray = 20;
void assign(int wins[], int sizeofArray);
void draw(int sizeofArray, int wins[]);
bool check(int num1, int wins[], int sizeofArray);
void entry(int& userNum);
void printOut(int wins[], int num);
int main()
srand(time(nullptr));
int user[sizeofArray];
cout << "Good luck with this weeks lotto drawing!" << endl;
int wins[sizeofArray];
assign(wins, sizeofArray);
draw(sizeofArray, wins);
int userInput;
entry(userInput);
bool win = check(userInput, wins, sizeofArray);
if (win)
cout << "you have won!" << endl;
printOut(wins, sizeofArray);
void assign(int wins[], int sizeofArray)
for (int i = 0; i < sizeofArray; ++i)
wins[i] = 0;
void draw(int sizeofArray, int wins[])
int number = 0;
while (number < sizeofArray)
int number = rand() % 100 + 1;
if (!check(number, wins, sizeofArray))
wins[number] = number;
number++;
bool check(int num1, int wins[], int sizeofArray)
for (int j = 0; j < sizeofArray; j++)
if (wins[j] == num1)
return true;
return false;
void entry(int& userNum)
int j;
cout << "Enter your lottery number guess: ";
cin >> userNum;
cout << "Your number was " << userNum << endl;
void printOut(int wins[], int num)
cout << "Winning numbers in lottery are" << endl;
for (int j = 0; j < num; ++j)
cout << wins[j] << " ";
i
【问题讨论】:
如果出现编译错误,请复制粘贴到这里。 好吧我不应该说编译器错误,但它似乎在无限循环draw
是否无限循环?
您是否尝试过使用调试器来确定发生无限循环的位置?
【参考方案1】:
您的 draw 方法将无限循环,因为您两次声明了条件变量,导致 ++ 运算符应用于错误的变量
void draw(int sizeofArray, int wins[])
int number = 0; // <--- HERE
while (number < sizeofArray)
int number = rand() % 100 + 1; // <--- AND HERE
if (!check(number, wins, sizeofArray))
wins[number] = number;
number++; //This will increase the inner variable number not the outer one
要修复它,只需更改变量的名称
void draw(int sizeofArray, int wins[])
int counter = 0; <---
while (counter < sizeofArray) <---
int number = rand() % 100 + 1;
if (!check(number, wins, sizeofArray))
wins[number] = number;
counter++; <---
【讨论】:
【参考方案2】:我们来看看draw()
:
void draw(int sizeofArray, int wins[])
int number = 0; //First variable of name number
while (number < sizeofArray)
//new variable with name number is introduced, it shadows the first one
int number = rand() % 100 + 1; //<-----------------------+
if (!check(number, wins, sizeofArray)) // |
wins[number] = number; // |
number++; //Here you actually increase this variable-+
这里发生所谓的阴影,外部int number
永远不会在循环内修改。只需重命名其中一个,就可以了。
如果您想了解更多相关信息,请查看here。
【讨论】:
以上是关于尝试创建乐透游戏,执行和编译有问题的主要内容,如果未能解决你的问题,请参考以下文章