1

我正在尝试编写一个使用种子生成伪随机数的程序。但是,我遇到了问题。

我收到这个错误

39 C:\Dev-Cpp\srand_prg.cpp void value not ignored as it ought to be 

使用此代码

#include <iostream>
#include <iomanip>
#include <sstream> 
#include <limits>
#include <stdio.h>

using namespace std ;

int main(){
    int rand_int;
    string close ;

    close == "y" ;

    cout << endl << endl ;
    cout << "\t ___________________________________" << endl ;
    cout << "\t|                                   |" << endl ;
    cout << "\t|   Pseudorandom Number Game!       |" << endl ;
    cout << "\t|___________________________________|" << endl ;
    cout << endl << endl ;

    while ( close != "y" ){

        rand_int = srand(9);
        cout << rand_int << endl ;

        cout << "  Do you wish to exit the program? [y/n]     " ;
        cin >> close ; }

}
4

5 回答 5

8

srand不返回随机数,它只是重新设置随机数生成器的种子。之后打电话rand实际得到一个号码:

srand(9);
rand_int = rand();
于 2010-11-12T04:01:35.163 回答
4

srand() 生成一个种子(这是用于初始化随机数生成器的数字),并且每个进程必须调用一次。rand() 是您正在寻找的功能。

如果您不知道要采摘什么种子,请使用当前时间:

srand(static_cast<unsigned int>(time(0))); // include <ctime> to use time()
于 2010-11-12T04:01:58.483 回答
3

这样称呼它。

srand(9);
rand_int = rand();
于 2010-11-12T04:01:52.737 回答
2

您使用srand不正确,该特定功能用于设置种子以供以后调用rand.

基本思想是srand用一个不确定的种子调用一次,然后rand连续调用得到一个数字序列。就像是:

srand (time (0));
for (int i = 0; i < 10; i++)
    cout << (rand() % 10);

这应该会给你一些介于 0 和 9 之间的随机数。

您通常不会将种子设置为特定值,除非您正在测试或出于其他原因想要相同的数字序列。您也不要在每次打电话之前都设置种子,rand因为您可能会重复获得相同的号码。

所以你的特定while循环更像是:

srand (9); // or use time(0) for different sequence each time.
while (close != "y") {  // for 1 thru 9 inclusive.
    rand_int = rand() % 9 + 1;
    cout << rand_int << endl;

    cout << "Do you wish to exit the program? [y/n]? ";
    cin >> close;
}
于 2010-11-12T04:46:12.633 回答
1

srand 返回 void 函数并且不返回值。

在这里你可以看到更多关于它的信息。您只需要调用 srand(9) 并在此之后获取 rand() 的值,就像 J-16 SDiZ 指出的那样,谁会因此而获得支持:)

于 2010-11-12T04:05:26.280 回答