尝试创建乐透游戏,执行和编译有问题

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。

【讨论】:

以上是关于尝试创建乐透游戏,执行和编译有问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 tesseract.js 识别乐透彩票上的日期和数字?

java Q441:乐透

swift 乐透快速选择斯威夫特

Java-迷你乐透Wav

MinGW:C++ 编译器无法创建可执行文件

错误:Gradle:任务“:core:compileJava”执行失败。 > 编译失败