我试图用随机的200个数字来填充数组,这个数字可以从0到100。我把它填充,除了最后一对数字很奇怪。
这是我的代码。
for (int i = 0; i < NUM_LIST_ELEMENTS; i++)
{
int j = rand() % 100;
list[i] = j;
}
我的输出结果如下
原始阵列:
41 67 34 0 69 24 78 58 62 64 5 45 81 27 61 91 95 42 27 36 91 4 2 53 92 82 21 16 18
95 47 26 71 38 69 12 67 99 35 94 3 11 22 33 73 64 41 11 53 68 47 44 62 57 37 59 23 41
29 78 16 35 90 42 88 6 40 42 64 48 46 5 90 29 70 50 6 1 93 48 29 23 84 54 56 40 66
76 31 8 44 39 26 23 37 38 18 82 29 41 33 15 39 58 4 30 77 6 73 86 21 45 24 72 70 29
77 73 97 12 86 90 61 36 55 67 55 74 31 52 50 50 41 24 66 30 7 91 7 37 57 87 53 83 45
9 9 58 21 88 22 46 6 30 13 68 0 91 62 55 10 59 24 37 48 83 95 41 2 50 91 36 74 20
96 21 48 99 68 84 81 34 53 99 18 38 0 88 27 67 28 93 48 83 7 21 10 17 13 14-858993460
9 16 35 51 0 49 19 56 98 3 24 8 44 9 89 2 95 85 93 43 23 87 14 3 48 0 58 18 80
96 98 81 89 98 9 57 72 22 38 92 38 79 90 57 58 91 15 88 56 11 2 34 72 55 28 46 62 86
75 33 69 42 44 16 81 98 22 51 21 99 57 76 92 89 75 12 0 10 3 69 61 88 1 89 55 23 2
85 82 85 88 26 17 57 32 32 69 54 21 89 76 29 68 92 25 55 34 49 41 12 45 60 18 53 39 23
79 96 87 29 49 37 66 49 93 95 97 16 86 5 88 82 55 34 14 1 16 71 86 63 13 55 85 53 12
8 32 45 13 56 21 58 46 82 81 44 96 22 29 61 35 50 73 66 44 59 92 39 53 24 54 10 45 49
86 13 74 22 68 18 87 5 58 91 2 25 77 14 14 24 34 74 72 59 33 70 87 97 18 77-33686019
注意每个数组中的最后一个数字真的很奇怪。我能做些什么来避免这种情况吗?顺便说一下,这是两个不同的数组。
感谢发布的所有人!我搞定了!
答案 0 :(得分:7)
你正在阅读超出阵列末尾的那个。
e.g。如果使用200个元素填充数组,则应该写入0到199,而不是0到200或1到200。
顺便说一下 - rand()%100不会使数字从0到100.它只会使数字从0到99。
此外,正如兰迪霍华德所说(谢谢),你可以按照http://www.azillionmonkeys.com/qed/random.html的建议获得更随机的一代。
答案 1 :(得分:2)
这可能是因为您的代码打印结果有问题。您可能正在从索引0循环到200,其中包含201个项目。
我计算了你的输出,发现有201项,如果最后的77-33686019实际上是2个单独的数字。
如果不是这样,你可能会在代码中的某个地方有一些printf / cout,它实际上打印了一些其他值。要确认这一点,您可以在输出数组的循环后立即尝试printf ("\n");
。如果你的负数最终在另一条线上,你就会知道它是你代码中的其他一些printf。
您可能希望使用int j = rand() % 101;
代替0到100.您的原始代码会为您提供0到99之间的随机范围。