rand()生成器卡在1个数字c ++上

时间:2015-02-23 09:43:53

标签: c++

我正在编写一个带有返回随机数的函数的代码。随机数是从0输入到我输入的最大数。除此之外我必须生成3个随机数,然后随机数将返回char' - ' ' +' ' *'代替。代码无法正常工作。每当我输入100时,生成的随机数始终为41,生成char的另一个随机数总是生成 - 带笑脸的符号(不开玩笑,char符号旁边会出现一个笑脸)。谁能告诉我我的代码有什么问题?非常感谢你的帮助。

#include <iostream>
#include <cmath>
#include <cstdlib>

using namespace std;

int main()
{
    int getNumber(int);
    char getOperator(int);
    int max = 0;
    int randOperator = 0;

    cout << "Enter a value(1- 101)" << endl;
    cin >> max;

    while((max < 0) || (max > 101))
    {
        cout << "invalid value. Please enter a value (1 - 101)" << endl;
        cin >> max;
    }

    cout << endl;
    cout << getNumber(max) << endl;

    cout << getOperator(randOperator);


}

int getNumber(int max)
{
    int hehe;
    hehe = rand()% max;
    return hehe;
}

char getOperator(int randOperator)
{
    for(int x = 0; x < 5; x++)
    {
        randOperator = rand() % 3;

        if(randOperator = 0)
        {
            cout << '+';
        }else if(randOperator = 1)
        {
            cout << '-';
        }else
        {
            cout << '*';
        }

        return randOperator;
    }
}

2 个答案:

答案 0 :(得分:3)

此代码应解决您的问题

#include <iostream>
#include <cmath>
#include <cstdlib>
#include<time.h>
using namespace std;

int main()
{
    srand(time(NULL));
    int getNumber(int);
    char getOperator(int);
    int max = 0;
    int randOperator = 0;

    cout << "Enter a value(1- 101)" << endl;
    cin >> max;

    while((max < 0) || (max > 101))
    {
        cout << "invalid value. Please enter a value (1 - 101)" << endl;
        cin >> max;
    }

    cout << endl;
    cout << getNumber(max) << endl;

    cout << getOperator(randOperator);


}

int getNumber(int max)
{
    int hehe;
    hehe = rand()% max;
    return hehe;
}

char getOperator(int randOperator)
{
    for(int x = 0; x < 5; x++)
    {
        randOperator = rand() % 3;

        if(randOperator == 0)
        {
            return '+';
        }else if(randOperator == 1)
        {
            return '-';
        }else
        {
            return '*';
        }

    }
}

要在每次运行程序时生成不同的随机数,您需要为rand()设定种子。您可以使用我在此代码中使用的srand()来完成此操作。

你犯了一个粗心的错误

if(randOperator = 0)

else if(randOperator = 1)

如果仔细观察,您会发现已使用=代替==来检查是否相等。 =将分配值,因此要检查是否相等,请使用我的代码中指示的==

现在在你的代码的这一部分

char getOperator(int randOperator)
{
    for(int x = 0; x < 5; x++)
    {
        randOperator = rand() % 3;

        if(randOperator = 0)
        {
            cout << '+';
        }else if(randOperator = 1)
        {
            cout << '-';
        }else
        {
            cout << '*';
        }

        return randOperator;
    }
}

函数的返回类型是char,你返回一个int。在我的代码中,我使用cout << '+';而不是return '+';。通过这样做,操作员可以按照您的意愿返回。

嗯,这是为了解释。如果您需要更多解释,请询问。

答案 1 :(得分:0)

有两个错误:

第一个bug: 在函数getOperator中,您在if语句中指定一个值,而不检查是否相等!为此,您必须使用==

结果,你总是' - '得到结果。因为randOperator=1的结果是1,所以这是真的。

 char getOperator(int randOperator)
 {
    for(int x =0; x < 5; x++)
    {
        randOperator = rand() % 3;

        if(randOperator == 0) //!!!!! You used (randOperator = 0) which will be interpreted as false
        {
            cout << '+';
        }else if(randOperator == 1) // !!!!!! You used (randOperator = 1) which will be interpreted as true
        {
            cout << '-';
        }else
        {
            cout << '*';
        }

        return randOperator;
    }
}

第二个错误(笑脸)

你把操作员拿出来并给予rand(笑脸)的值,这个值由for覆盖,只运行一次(因为返回)?!

请改为尝试:

 char getOperator(int randOperator)
 {
        randOperator = rand() % 3;

        if(randOperator == 0) //!!!!! You used (randOperator = 0) which will be interpreted as false
        {
            return '+';
        }else if(randOperator == 1) // !!!!!! You used (randOperator = 1) which will be interpreted as true
        {
            return '-';
        }
        return '*';
}

仍然像地狱一样难看,但它会起作用。