gpt4 book ai didi

c - 查看是否已抽取号码

转载 作者:太空宇宙 更新时间:2023-11-04 01:35:40 25 4
gpt4 key购买 nike

我在理解 C 中的“do - while”语句时遇到问题。

这是完整的代码:http://pastebin.com/uPRvRscd

程序生成 6 个数字,范围从 0 到 50。6 个数字中没有一个重复。

这是 do-while 循环:

for(c=0;c<BALLS;c++)
{
/* See if a number has been allready been drawn */
do
{
ball = rand() % RANGE; /* Generate the random ball */
}
while(numbers[ball]); /* How is this compare made ? */
/* Number drawn */
numbers[ball] = 1; /* What is this for ?!? */
printf("%2d ", ball+1); /* add 1 to ball so ball won't be zero */
}
  • 逻辑比较如何工作?

我知道 DO 取决于 WHILE 是真还是假。

numbers[ball] = 1; 这应该做什么? (如果我删除它,结果是一样的)

谢谢

最佳答案

C 有一条规则,“任何为零的”都是假的,其他都是真的。因此,当您编写 if(x) 时,它与 if (x != 0) 相同,而 if(!x) 表示 如果(x == 0)

forwhiledo - while 中的机智条件相同。

所以你的代码会:

do
{
ball = rand() % RANGE; /* Generate the random ball */
}
while(numbers[ball] != 0);

我假设 numbers 是一个 50 的数组,其中填充了零 [如果它是静态存储持续时间,那么如果没有其他说明,它会自动设置为零。]

当一个数字被绘制时 numbers[ball] = 1; 将该数字设置为非零,因此如果我们再次绘制相同的数字,do-while 循环将再次循环并选择另一个数字[我们希望 - 如果随机数生成器真的很垃圾,它可能会变成一个无限循环]

关于c - 查看是否已抽取号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14839778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com