【发布时间】: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 <= x会导致越界访问(所以 UB)。另请注意,您将索引增加了两倍(++和+= 1)。 -
我确实理解为什么我每次都得到相同的值,但我不认为,这与我的问题有某种关系。您可能忘记给随机数生成器播种 1 次,每次运行程序时都会更改种子。如果不是这种情况,我猜你使用的是 rand() 损坏的旧版本 MinGW