Возникли проблемы при закрытии циклов for для массива

Проблема, с которой я сталкиваюсь в своем коде, заключается в том, что цикл for, похоже, не прерывается в нужное время. Идея состоит в том, что когда все значения внутри массива больше нуля, цикл for прерывается. Проблема в том, что перерыв не происходит. Вот мой код

#include<stdio.h>

int randomInt(int max)
 {
  return (random(2)%max);
 }

main()
 {
  int i,k=0,j;
  int position=1,r=1; /*Position indicates the position of the particle
                        and r represents where the particle will move
                        next*/ 
  int seed,L=10,M=20;/*L is the number of sites and M is the number of hops*/
  float n,sum=0;
  float average;

  int frequency[M]; 
  for(i=0;i<(M);i++)
   {
    frequency[i]=0;
   }
  //setup the random seed generator
  printf("\nEnter your value of seed\n");
  scanf("%d",&seed);
  srandom(seed); 

  for(i=0;i<M;i++) //This loops around the total number of loops.
   {

      printf("\nThe particle is at position %d\n",position);
      n=randomInt(2);/*This chooses either the numbers 0 or 1 randomly */

      frequency[position]=frequency[position]+1;
      printf("This position has been visited %d times\n",frequency[position]);

      sum=sum+frequency[position];

      /*Below represents the conditions which will determine the movement
        of the particle*/              
        if(n==0)
         {
           r=1;
         }
        if(n==1)
         {
           r=-1;
         }
        position = position + r;
        if(position==0)
         {
          position=L;
         }

        if(position==L+1)
         {
          position=1;
         }

        //This 'for' loop below is used to check if all the sites have been visited.

        for(j=0;j<(L-1);j++) 
         {
          if(frequency[j]==0)
           {
            k++;
           }  
         }

        if(k==0)
         {
          break;
         }
        if(k!=0)
         {
          k=0;
         }

      }
    printf("\nThe particle hopped %d times when it visited every site\n",i);

    printf("\nThe total frequency of hops is %.lf\n",sum);
    average=sum/i;
    printf("\nAverage number of hops made when all the sites have been visited %.2lf\n",average);
} 

1 ответ

Это потому, что вы выходите только из внутреннего, вложенного for петля. Лучший способ для break от обоих, это установить некоторые bool флаг, установите его true отрываясь от внутреннего цикла, а затем проверьте условие во внешнем:

bool flag = false;

затем во внутреннем:

flag = true;
break;

и сразу после этого во внешнем:

if(flag) break;

Редактировать:

Если я неправильно понял, и вы хотите выйти только изнутри, причиной этого может быть также то, что вы не сбросили свой k к нулю после каждой большей итерации, поэтому, если следующий массив только нули, k все еще имеет старое значение и никогда не остается 0 в конце.

Другие вопросы по тегам