C++ 获取多个随机数的问题

C++ 获取多个随机数的问题,c++,winapi,random,C++,Winapi,Random,可能重复: 我正在从AVI中提取帧。我希望用户选择是从用户给定的范围获取所有帧,还是获取所有可用帧,或者获取用户给定数量的随机帧。前两个函数工作得很好。但是对于随机帧,我总是只得到一帧,而不是给定的帧数。因此,用户在此处设置帧数: case AVIINF_BUTTON_GETRAND: extractmode=-1; GetDlgItemText(aviinfhwnd, AVIINF_EDIT_GETRAND, charfrQuantity, 2

可能重复:

我正在从AVI中提取帧。我希望用户选择是从用户给定的范围获取所有帧,还是获取所有可用帧,或者获取用户给定数量的随机帧。前两个函数工作得很好。但是对于随机帧,我总是只得到一帧,而不是给定的帧数。因此,用户在此处设置帧数:

case AVIINF_BUTTON_GETRAND:
            extractmode=-1;
            GetDlgItemText(aviinfhwnd, AVIINF_EDIT_GETRAND, charfrQuantity, 20);
            frQuantity = atoi(charfrQuantity);
            ExtractAVIFrames(extractmode, frFrom, frTo, frQuantity);
            EndDialog(aviinfhwnd, IDCANCEL);
break;
然后在ExtractAVIFrames()中,在所有初始化之后,我执行以下操作:

case -1://get x random frames

            for (int i=1; i<=frQuantity; i++)
            {
                index= GetRandomInt(iNumFrames);
                BYTE* pDIB = (BYTE*) AVIStreamGetFrame(pFrame, index);
                CreateFromPackedDIBPointer(pDIB, index);
            }
break;
所以,这应该调用GetRandomInt()函数frQuantity times,我应该有frQuantity bmp,对吗?但我没有,我总是只得到一个(随机一个)。似乎在每次调用之后,GetRandomInt都会返回与前一次调用相同的数字。 发生了什么?
谢谢

您正在使用相同的种子初始化伪随机数生成器。只需初始化一次,并使用半随机(例如,系统时钟中的毫秒数)数字。

以前多次询问和回答。srand()只能调用一次。将它作为main()中的第一条语句。为什么不使用time(NULL)来初始化它呢。
int GetRandomInt(int randNumScale)
{
    srand((unsigned)time(0));
    int random_integer;
    int range=randNumScale;
    random_integer = (rand()%range)+1;
    return random_integer;
}