【问题标题】:Can I make a loop that start from a certain pointer and end where it started? [closed]我可以创建一个从某个指针开始并在它开始的地方结束的循环吗? [关闭]
【发布时间】:2016-05-07 12:05:55
【问题描述】:

我正在尝试构建类似于时钟策略算法的东西。
现在我需要我的循环到一个完美的时钟,从一个指针开始,如果它没有找到它正在寻找的东西,即:-
for(i=ptr;i<50;i++)
那么如果它没有找到它正在寻找的东西,它将从
( i = 0 ; i < ptr; i++)
循环 有没有办法让这个逻辑在一个循环中完成?

【问题讨论】:

  • 不,下次我需要 i 等于 0 并循环直到 i

标签: c loops pointers


【解决方案1】:

do 循环中使用模运算:

i = ptr % 50;
do{
    //body of loop
    i = (i+1) % 50;
} while(i != ptr);

【讨论】:

  • 我认为不一样,如果ptr>=50,那么你的循环体也会执行,这似乎是错误的......
  • @SouravGhosh 我读到这个问题是想在整数 mod 50 上循环,循环在 0 到 49 范围内的给定 ptr 开始和结束。i 永远不会离开那个范围。
  • 对,因为ptr 位于范围内。如果没有怎么办? for 处理,但 do..while 没有。对不起,不能同意两者都是一样的。 :)
  • @SouravGhosh 我认为这是问题陈述中隐含的自然前提条件。你确实提出了一个合理的担忧。我将调整代码以强制执行前提条件。
  • 感谢您明白这一点。 :)
【解决方案2】:

我从您的问题中了解到,您是否想先检查某个子范围,如果它不满足您的条件,然后再检查该范围的其余部分,基本上就是检查整个范围。

您可以在单个循环中完成此操作,只需稍微更改循环逻辑即可。不是从一个值开始然后向上到范围,而是从较高的范围开始到较低的范围。这会自动满足要求。

类似

for (int i = 50; i > 0; i-- )

将完成这项工作。它将结合两个循环的有效性,例如

  • for ( i=ptr; i < 50; i++)
  • for ( i=0 ; i < ptr; i++)

【讨论】:

  • 我正在遵循某种算法,所以对我来说从ptr开始然后在它结束是很重要的。
【解决方案3】:

好吧,您可以尝试使用% 进行某种破解。

问题是,你想让ptr被击中一次还是两次?

如果只有一次,以下可能就足够了。

for (i = ptr + 1; i != ptr; i = (i + 1) % 50)

如果您希望循环准确地从 ptr 开始,准确地在 ptr 结束,则必须保留一些溢出标志来处理它。

说实话,最好只使用两个循环。您尝试做的事情更清楚,而且更不容易出错。

【讨论】:

  • 嗯,这就像我从某个索引循环一个数组,如果它没有找到从该索引开始到数组末尾的范围内要查找的内容从数组的开头开始并在索引处停止。
猜你喜欢
  • 2021-11-04
  • 2018-03-31
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
相关资源
最近更新 更多