【问题标题】:Variable Length Array elements random generator可变长度数组元素随机生成器
【发布时间】:2022-11-17 00:33:41
【问题描述】:

简单的任务,生成我想要的长度的数组。

我也不知道如何获取我创建的数组,除了我自己的奇怪方法。我的代码的第一部分是否正常工作,我应该重新考虑我想要获取它们的方式(可选)?

虽然,我确实理解为什么我每次都得到相同的值,但我不认为,这与我的问题有某种关系。

我正在写下这个:

  cin >> x;
  int array1[x];
  int array2[x]; 
  for (int i = 0; i <= x; i++) {
    array1[i] = rand() % 10 + 1;
    array2[i] = rand() % 10 + 1;
  }
  

  cout << "[" << array1[a];
  for (int a = 0; a <= x; a++) {
    a += 1; 
    cout << ", " <<array1[a];
  }


  cout << "] [" << array2[b];
  for (int b = 0; b <= x; b++) {
    b += 1; 
    cout << ", " << array2[b];
  }
  cout << "]";

为什么我在 x = 6、5、15 的情况下会得到一些异常的答案,如下所示:

[2, 5, 9, 6, 0] [8, 1, 9, 6, 32759]
[2, 5, 9, 6, 2, 8, 3, 2, 8] [8, 1, 9, 6, 2, 7, 4, 7, 7]

【问题讨论】:

  • VLA 不是 C++(它是 C 并且被某些编译器支持为扩展)。请改用std::vector。
  • C 风格数组、VLA、不使用现代 C++ 随机数函数。旧式枚举。我该停在哪里?这很糟糕。
  • @JesperJuhl 你没有破坏顶端的那些非标准数组,所以你早点停下来了:-P
  • b &lt;= x 会导致越界访问(所以 UB)。另请注意,您将索引增加了两倍(++ 和+= 1)。
  • 我确实理解为什么我每次都得到相同的值,但我不认为,这与我的问题有某种关系。您可能忘记给随机数生成器播种 1 次,每次运行程序时都会更改种子。如果不是这种情况,我猜你使用的是 rand() 损坏的旧版本 MinGW

标签: c++ arrays


【解决方案1】:

只需添加srand(time(nullptr))

srand(time(nullptr));
for (int i = 0; i <= x; i++) {
    array1[i] = rand() % 10 + 1;
    array2[i] = rand() % 10 + 1;
  }

【讨论】:

    猜你喜欢
    • 2012-01-26
    • 2020-03-11
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多