C - rand()模0

时间:2015-10-17 21:10:52

标签: c random int modulo

当我尝试通过int生成随机数0时:

//Populate Currently Allocated Reasource for each customer
for (i = 0; i < NUMBER_OF_CUSTOMERS; i++) 
{
    printf("%d:[ ",i);
    for (j = 0; j < NUMBER_OF_RESOURCES; j++)
    {
        allocation[i][j] = rand() % maximum[i][j];
        printf("%d ",allocation[i][j]);
    }
    printf("] \n\n");
}

maximum[i][j]为0时,我得到一个浮点异常。

是否有更好的方法可以在floating point error引起rand() % 0的情况下创建随机数?

编辑: 当maximum为0时,随机数输出应为0。

5 个答案:

答案 0 :(得分:2)

a % b除以a时,b会给出余数。因此,它会始终为您提供小于b的结果,并且当b为零时它不会起作用,因为您无法除以零。

如果您想要0到x之间的随机数,则需要rand() % (x + 1)

答案 1 :(得分:1)

尝试使用此代替

#include <windows.h>
using namespace std;

class WinApp
{
public:

    WinApp();
    ~WinApp();

    BOOL InitApp(HINSTANCE hThisInstance);
    BOOL InitInst(LPSTR lpszArgument, int nFunsterStill);


    HWND m_hwnd;
    HWND h_edit1;
    HINSTANCE m_hInstance;

};

答案 2 :(得分:0)

你说:

  

当maximum为0时,随机数输出应为0。

您可以添加一张支票来处理此问题。

if ( maximum[i][j] == 0 )
{
   allocation[i][j] = 0;
}
else
{
   allocation[i][j] = rand() % maximum[i][j];
}

答案 3 :(得分:0)

您可以使用?:运算符整齐地写出额外条件:

allocation[i][j] = maximum[i][j] ? (rand() % maximum[i][j]) : 0;
  

?:条件表达式如果条件为真?然后是值X:否则为Y

  

在计算机编程中,?:是一个三元运算符,它是几种编程语言中基本条件表达式语法的一部分。它通常被称为条件运算符,内联if(iif)或三元if。

     

Wikipedia

答案 4 :(得分:0)

  

当maximum为0时,随机数输出应为0。

模运算符是除法后的余数。由于除零是未定义的,因此模0也是如此。

您需要一个条件来防止尝试除以零。您可以使用if / else语句或ternary operator?:)来完成此操作。换句话说,改变这个

allocation[i][j] = rand() % maximum[i][j];

以下之一。

if (maximum[i][j] == 0)
{
    allocation[i][j] = 0;
}
else
{
    allocation[i][j] = (rand() % maximum[i][j]);
}

allocation[i][j] = (maximum[i][j] == 0) ? (rand() % maximum[i][j]) : 0;