【问题标题】:c++ rand() % 100 [closed]c++ rand() % 100 [关闭]
【发布时间】:2013-03-21 14:48:36
【问题描述】:

我试图用 0-100 的随机 200 个数字填充一个数组。我得到它填充除了最后几个数字非常奇怪。

这是我的代码。

     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

请注意,每个数组中的最后一个数字真的很奇怪。我能做些什么来避免这种情况吗?顺便说一句,这是两个不同的数组。

感谢所有发帖的人!我搞定了!

【问题讨论】:

  • 我认为您的数组大小比 NUM_LIST_ELEMENTS 大一
  • 你确定你的数组边界是正确的吗?尝试使用 for(int i = 0; i 在循环后打印数字
  • 您在最后一个号码之后打印了其他内容。 14-85899346077-33686019 之间没有空格。
  • Mod 是一种将 rand 值放入范围的非常不受欢迎的方法。可能比您想知道的更多,但请看这里:azillionmonkeys.com/qed/random.html 除此之外,请参阅下面有关无效数组索引的答案。
  • 您展示的每个数组都包含 201 个元素。 (将最后一个输出计算为两个单独的数字)

标签: c++ arrays random populate


【解决方案1】:

您正在读取超出数组末尾的一个。

例如如果你用 200 个元素填充一个数组,你应该从 0 到 199 写入和读取,而不是 0 到 200 或 1 到 200。

顺便说一句 - rand() % 100 不会生成从 0 到 100 的数字。它只会生成从 0 到 99 的数字。

此外,正如 Randy Howard 所说(谢谢),您可以通过遵循 http://www.azillionmonkeys.com/qed/random.html 的建议获得更均匀的随机生成。

【讨论】:

  • 你数过他输出的数字吗?
  • @André Puel 我算 201 吗?
【解决方案2】:

这可能是因为打印结果的代码有问题。您可能从索引 0 循环到 200,它有 201 个项目。

我数了数你的输出,发现有 201 个项目,如果最后一个 77-33686019 实际上是 2 个单独的数字。

如果不是这样,您的代码中可能有一些 printf/cout,实际上会打印一些其他值。要确认这一点,您可以在输出数组的循环之后立即尝试printf ("\n");。如果您的负数出现在不同的行上,您就会知道它是代码后面的其他 printf。

您可能想改用int j = rand() % 101;,以便获得 0 到 100。您的原始代码为您提供了从 0 到 99 的随机范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2019-02-25
    • 1970-01-01
    • 2018-01-24
    • 2017-07-06
    • 2019-08-30
    相关资源
    最近更新 更多