Возникли проблемы при закрытии циклов 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
в конце.