rand() 函数后继续指令的问题

Posted

技术标签:

【中文标题】rand() 函数后继续指令的问题【英文标题】:Problem with continue instruction after rand() function 【发布时间】:2020-07-25 20:43:48 【问题描述】:

我只是想解决一个要求我编写一个例程来生成一组介于 2 到 10 之间的偶数随机数的练习。

问题出在打印的时候,因为我希望最后一个数字后面不要跟逗号。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()

    int i, a, b, c;

    i = a = b = c = 0;

    srand(time(NULL));

    for (i = 2; i <= 10; i++)
    
        a = rand() % 8 + 2;

        if ((i <= 10) && (a % 2) != 0)
           
            continue;
        
        printf((i < 10) ? "%d, " : "%d\n", a);
    
    return 0;

这是两个执行示例:

4, 4, 2, 8,
2, 8, 6, 4, 2

在一种情况下,逗号不会出现在末尾,但在另一种情况下会出现。在调试时,我发现当最后一个数字为奇数时会发生错误,因为 continue 语句会导致它进入下一次迭代。

【问题讨论】:

您可能会发现在除第一个之外的所有数字之前打印逗号更容易。您也可以使用一个函数仅生成偶数,然后根据需要多次调用它。目前尚不清楚您实际需要多少个数字,额外的条件和循环内的 continue 只是噪音。 i 永远不会是 &lt;= 10 以外的任何东西,因为这是你的 for 循环条件,你可以在最后的循环外打印 \n 【参考方案1】:

正如退休忍者所说,有许多不必要的条件是可以避免的。我已经修改了您的代码,以便a 将始终在210 之间生成一个偶数,从而不再需要您实现的逻辑。这就是我将这个新的a 值分配为:

a = ((rand() % 4) * 2 + 2);

这会在[0,4] 之间生成一个随机值,将其乘以 2,然后加 2,对于 2 到 10 之间的整数,不包括在内。由于您的新 a 始终是偶数,因此我删除了您的逻辑以检查数字是否为偶数。

修改后的代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()

    int i, a, b, c;

    i = a = b = c = 0;

    srand(time(NULL));

    for (i = 2; i <= 10; i++)
    
        a = ((rand() % 4) * 2 + 2);
        printf((i < 10) ? "%d, " : "%d\n", a);
    
    return 0;

请注意,此代码将始终生成 9 个数字,因为您没有指定每次要打印多少个值,只是您需要“编写一个例程来生成一组 2 到 10 之间的偶数随机数”。您始终可以通过更改 for 循环中的 i 的值来更改打印的数字数量。但是,逗号问题不再是问题了。

如果我的解决方案对你有帮助,请mark my answer作为正确答案:)

【讨论】:

感谢您的建议,两者都非常有帮助,虽然问题没有说明需要多少数字,但定义它似乎很重要。 确实,重要的是要指定这样的问题需要多少个数字。感谢您标记我的答案

以上是关于rand() 函数后继续指令的问题的主要内容,如果未能解决你的问题,请参考以下文章

php的array_rand 函数在多次被执行后为啥会出现一样的结果?

C语言模拟FIFO算法,随机生成320条指令,有四块物理块,为啥错了?

为啥我的值在运行我的函数后没有改变? [复制]

[原创]Matlab生成随机数

如何用rand函数产生一个随机数?

openssl rand 指令解析