C 我有一个无限循环,我需要在这两个循环之间中断,只要从它返回的任意三个连续值相同。怎么做?

C 我有一个无限循环,我需要在这两个循环之间中断,只要从它返回的任意三个连续值相同。怎么做?,c,C,下面的代码显示了rowtotal[0],这是每次迭代从无限循环中得到的返回值。当costcheck数组返回的三个值都相同时,我试图打破循环。这是我的代码: do { . . . /*do loop body*/ . . costcheck[counter3]=rowtotal[0]; if(costcheck[counter3-2]==costcheck[counter3] && costcheck[counter3

下面的代码显示了
rowtotal[0]
,这是每次迭代从无限循环中得到的返回值。当costcheck数组返回的三个值都相同时,我试图打破循环。这是我的代码:

do
{
 .
 .
 . 
    /*do loop body*/
 .
 .
      costcheck[counter3]=rowtotal[0];

      if(costcheck[counter3-2]==costcheck[counter3] &&
         costcheck[counter3-1]==costcheck[counter3] )
      {
           response=1;
      }
      counter3++;
     printf("\t\t\t Number of iterations: %d \r", stop++);
 }
 while(response!=1);

只要去掉所有奇怪的、多余的变量。您只需要保存上一次迭代的结果,以及每次找到匹配项时增加的计数器,而不是循环中的每次

int counter=0; 
const int COUNT_N = 3;
data_t prev=FORBIDDEN; // a value that rowdata[0] can never have

while(counter != COUNT_N) 
{ 
  ... 

  if(prev == rowdata[0])
  {
    counter++;
  }
  else
  {
    counter=0;
  }

  prev = rowdata[0];
}

我只是想详细说明一下伦丁的回答,在我看来,这是一个不错的选择(可能会作为评论发布,但缺乏声誉…) 唯一缺少的是实际的循环推进计数器(示例中的计数器3):


如果您确实想要一个无限循环,
If(costcheck[counter-1]==costcheck[counter-2]&&costcheck[counter-2]==costcheck[counter-3])
将导致程序失败,如果
costcheck
数组的元素少于3个。您必须确保此阵列中至少有3个元素

但是!!!!计数器不需要大于
3
,因为据我所知,您需要检查3个最常读取的元素。这意味着为了进行比较,您只需要记住最后读取的3个值

下面的示例最多存储3个
rowtotal[0]
值,并检查它们是否相等。如果是,则program退出;如果不是,程序将获得新的
rowtotal[0]
costcheck
数组的“末尾”,也是最早的值:这里的
costcheck[0]
丢失

我可以将代码发布到我制作的示例中,以显示逻辑应该如何工作

注意!!!我强烈认为伦丁和吗啡的溶液比我的要好得多

do
{
 .............
    if(counter < 3)
    {
      costcheck[counter] = rowtotal[0];
      counter++;
      continue;
    }
    else
    {
        if(costcheck[counter-1] == costcheck[counter-2] && costcheck[counter-2] == costcheck[counter-3])
        {
                response=1;
        }
        else
        {
            costcheck[counter-3] = costcheck[counter-2];
            costcheck[counter-2] = costcheck[counter-1];
            costcheck[counter-1] = rowtotal[0];
        }
    }
 }
 while(response!=1);
}
do
{
.............
如果(计数器<3)
{
成本检查[计数器]=行总数[0];
计数器++;
持续
}
其他的
{
如果(成本检查[计数器-1]==成本检查[计数器-2]&成本检查[计数器-2]==成本检查[计数器-3])
{
响应=1;
}
其他的
{
成本检查[计数器-3]=成本检查[计数器-2];
成本检查[计数器-2]=成本检查[计数器-1];
成本检查[计数器-1]=行总计[0];
}
}
}
while(响应!=1);
}

if(costcheck[counter3-2]==…开头的行已生成,请更正。问题是什么?您确定要在分配
costcheck[counter3]后增加
counter3
?我已经更正了计数器增量。但是我仍然无法停止循环…它现在已经超过了50k次迭代。请帮助。感谢回答Lundin,但我需要比较三个连续值,请建议一种方法。@SaurabhKhati使用与
rowdata[0]相同的数据类型
,显然…
数据\u t
只是伪代码;我不知道
rowdata[0]
是什么类型,因为您的问题中没有包含该类型。您能告诉我您对“禁止”做了什么吗有吗?在实现你的想法后,我的程序总是只在3次迭代后停止,这是不可取的,请建议一种方法。@SaurabhKhati,要么你的数据在3次迭代后应该停止,要么你以错误的方式实现了它。Lundin的解决方案有效。发布你的实现,以便我们可以看到它。loopcounter将始终是正确的o、 因为我只取rowtotal数组的第0个元素。它只是一个值。好的,知道了,抱歉-更新的代码被剪掉以更好地反映您的情况。但这仍然是Lundin的答案。
do
{
 .............
    if(counter < 3)
    {
      costcheck[counter] = rowtotal[0];
      counter++;
      continue;
    }
    else
    {
        if(costcheck[counter-1] == costcheck[counter-2] && costcheck[counter-2] == costcheck[counter-3])
        {
                response=1;
        }
        else
        {
            costcheck[counter-3] = costcheck[counter-2];
            costcheck[counter-2] = costcheck[counter-1];
            costcheck[counter-1] = rowtotal[0];
        }
    }
 }
 while(response!=1);
}