【问题标题】:How do I get this random number generator out of an infinite loop?如何让这个随机数生成器脱离无限循环?
【发布时间】:2016-10-16 22:47:09
【问题描述】:

我有一个学校作业,我需要创建一个彩票计划。它应该允许用户输入六个数字,然后生成六个随机数进行比较。我让输入正常工作,但我遇到了一个问题,即随机数生成器(位于 while 循环中)卡在无限循环中,我完全不知道是什么原因造成的,因为我从未有过无限循环任何以前的程序。如果有人可以查看代码并确定问题所在,我将不胜感激。

#include<iostream>
#include<time.h>

using namespace std;

void randomizeSeed();
int randomRange(int min, int max);
int getInteger();

int main()
{
randomizeSeed();

const int minNumber = 1;
const int maxNumber = 49;
const int Size = 6;
int luckyNumbers[6] = {};
int randomNumber = randomRange(minNumber, maxNumber);
int winningNumbers[6] = {};

cout << "Enter six numbers between 1 and 49...\n";
{
    for (int i = 0; i < Size; i++)
    {
        luckyNumbers[i] = getInteger();
    }
    for (int i = 0; i < Size; i++)
    {
        for (int i = 0; i < Size - 1; i++)
        {
            if (luckyNumbers[i] > luckyNumbers[i + 1])
            {
                int temp = luckyNumbers[i];
                luckyNumbers[i] = luckyNumbers[i + 1];
                luckyNumbers[i + 1] = temp;
            }
        }
    }
    cout << "Lucky Numbers: ";
    for (int i = 0; i < Size; i++)
    {
        cout << luckyNumbers[i] << " ";
    }
    cout << "\n";
    cout << "Press any button to see the Winning Numbers.\n";
    system("pause");

    bool exist = true;
    while (exist == true)
    {
        int count = 0;
        cout << "Winning Numbers: ";
        for (int j = 0; j < 6; j++)
        {
            winningNumbers[j] = randomRange(1, 49);
            cout << winningNumbers[j] << " ";
            system("pause");
        }
    }
}
}

void randomizeSeed()
{
srand(time(NULL));
}

int randomRange(int min, int max)
{
int randomValue = rand() % (max + 1 - min) + min;
return randomValue;
}

int getInteger()
{
int value = 0;
while (!(cin >> value) || (value >= 50) || (value <= 0))
{
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
return value;
}

【问题讨论】:

  • "如果有人可以请看一下代码" - 那个人就是你!使用你的调试器。
  • 调试器是解决此类问题的正确工具。 询问 Stack Overflow 之前,您应该逐行逐行检查您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
  • 那么,您在哪里将exist 设置为false 以结束循环?
  • 我的调试器没有显示任何错误。我终于让程序工作了。感谢您提供有用的提示。
  • 既然我已经弄明白了,谁能告诉我为什么随机数生成器会生成一个数字后跟零。

标签: c++ arrays loops


【解决方案1】:
for (int i = 0; i < Size; i++)
    for (int i = 0; i < Size - 1; i++)
        if (luckyNumbers[i] > luckyNumbers[i + 1])
        {
            int temp = luckyNumbers[i];
            luckyNumbers[i] = luckyNumbers[i + 1];
            luckyNumbers[i + 1] = temp;
        }

你有两个循环,它们都使用i。您可能的意思是使用另一个变量名称的第二个循环,例如:

for (int i = 0; i < Size; i++)
{
    for (int k = 0; k < Size - 1; k++)
    {
        if (luckyNumbers[i] > luckyNumbers[k + 1])
        {
            int temp = luckyNumbers[i];
            luckyNumbers[i] = luckyNumbers[k + 1];
            luckyNumbers[k + 1] = temp;
        }
    }
}

如果您将编译器警告级别设置为 4,那么编译器应该就这些错误向您发出警告。尝试解决所有编译器警告。

【讨论】:

    猜你喜欢
    • 2016-02-20
    • 2019-01-15
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多