c - rand() 函数后继续指令的问题
问题描述
我只是想解决一个要求我编写一个例程来生成一组介于 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 语句会导致它进入下一次迭代。
解决方案
正如退休忍者所说,有许多不必要的条件是可以避免的。我已经修改了您的代码,以便始终在和a
之间生成偶数,从而消除对您实现的逻辑的需求。这就是我分配这个新值的原因:2
10
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 之间的偶数随机数”。您始终可以通过更改循环i
中的值来更改打印的数字数量。for
但是,逗号问题不再是问题。
如果我的解决方案对您有所帮助,请将我的答案标记为正确答案:)
推荐阅读
- powershell - 从 azure DevOps 项目组织中提取版本
- asp.net-core - 在 .NET 授权框架中自定义 At_hash 验证
- java - 如何在 log4j.properties 中指定 Windows 服务器上的路径
- visual-studio-code - 避免使用 VSCode 重构格式进行细长的渲染条件
- sql - 加入变体(数组)雪花中的 ID
- javascript - 在 React 中使用 Hook (useState) 我如何像这个 Pattren 一样添加新行?
- django - Django 装饰器重定向到同一页面?
- mysql - 可以在 where 查询中使用 select 吗?
- python - 使用 Python 在嵌套列表之前添加字符串
- maven - 卡住从 BitBucket 管道中的私有 Maven 存储库下载工件