c-如何每隔四个循环和每隔一个循环都做一件事


int doEveryTwoTimes= 1;  // Counter to do something every two loops
int doEveryFourTimes= 2; // Counter to do something every four loops 
// add a nested infinite loop to increment counter
while(true){
if(doEveryTwoTimes%2 == 0){
// DO STUFF EVERY **TWO** LOOPS
}
if(?????){
// DO STUFF EVERY **FOUR** LOOPS
}
doEveryTwoTimes++;
doEveryFourTimes++;
}

我可以添加一个条件,使事情每两个循环发生一次,但如何为每第四个循环创建一个条件?

if (count % 4 == 0) {
// Stuff
}

关键是,对于任何n,通过使用mod n == 0来执行每个n循环。(严格来说,你可以对小于n的任何数字进行测试,但0很方便,因为对于任何自然数n总是小于n。)

此外,任何数量的此类操作都只需要一个计数器,因为计数器的递增与所有操作无关。

您甚至可以使用无条件的for循环,如下所示:

for (int count = 0; true; count++) {
if (count % 2 == 0) {
// Stuff every other loop
}
if (count % 4 == 0) {
// Stuff every fourth loop
}
}

它会不时地无声地溢出,但这不会对2的幂模产生任何真正的影响。但如果你想每五个循环做一件事,每次它滚动时你都会遇到奇怪的故障。要修复,请找到您正在使用的各种间隔的最小公倍数(对于所有可能的间隔,最多1277720是可以的),并像这样使用:

while (true) {
for (int count = 0; count < 27720; count++) {
if (count % 5 == 0) {
// Stuff every fifth loop
}
if (count % 12 == 0) {
// Stuff every twelfth loop
}
}
}

这确保了所有模量同时达到0,就在你在0开始另一个循环时。(最小公倍数很快就会变得非常大,有很多间隔,你可能必须使用longs或long longs来存储计数器。long long和最大值5342931457063200应该允许你在同一循环中为从2到40的每个间隔触发不同的代码路径。如果你需要更多的间隔,你需要运行单独的计数器。)

最新更新