c++ 为什么for循环的输出每次都是完全相同的结果?[副本]

qacovj5a  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(144)

此问题已在此处有答案

srand() — why call it only once?(7个回答)
4年前关闭。
我想这个程序产生4个不同的系列4随机数。程序当前为每个系列输出相同的数字。知道发生什么事了吗我想这和种子有关,但我不知 prop 体是什么。

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. using namespace std;
  5. int main()
  6. {
  7. int lotArr[6];
  8. int j = 0;
  9. int k = 0;
  10. int m = 0;
  11. int n = 0;
  12. int i = 0;
  13. bool crit = false;
  14. //interates through 4 sequences
  15. for(int i = 0; i < 4; i++ )
  16. {
  17. srand(time(NULL));
  18. //generates each number in current sequence
  19. for(m = 0; m < 4; m++)
  20. {
  21. lotArr[m] = rand() % 30 + 1;
  22. }
  23. //output
  24. for(n = 0; n < 4; n++)
  25. {
  26. cout << lotArr[n] << " ";
  27. }
  28. cout << endl;
  29. }
  30. return 0;
  31. }
zz2j4svz

zz2j4svz1#

这是因为time(NULL)以秒为单位返回UNIX时间戳。现在你的每一个外部for循环的执行时间都大大少于一秒。因此,srand(time(NULL))本质上在每个循环中设置相同的种子。我建议使用srand(time(NULL));你就没事了就像这样:

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. using namespace std;
  5. int main()
  6. {
  7. int lotArr[6];
  8. int j = 0;
  9. int k = 0;
  10. int m = 0;
  11. int n = 0;
  12. int i = 0;
  13. bool crit = false;
  14. srand(time(NULL));
  15. //interates through 4 sequences
  16. for(int i = 0; i < 4; i++ )
  17. {
  18. //generates each number in current sequence
  19. for(m = 0; m < 4; m++)
  20. {
  21. lotArr[m] = rand() % 30 + 1;
  22. }
  23. //output
  24. for(n = 0; n < 4; n++)
  25. {
  26. cout << lotArr[n] << " ";
  27. }
  28. cout << endl;
  29. }
  30. return 0;
  31. }
展开查看全部

相关问题