当我尝试通过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。
答案 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。
答案 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;