C语言for死循环?

int main()
{
int i,j,pbb[17][17],xxjsq,sbjsq;
for(i=1;i<18;i++) //2是晚班,0是上白班,1是休息。
{
xxjsq=0;
sbjsq=0;
for(j=1;j<18;j++)
{
if(j==i) //当行列相等时上晚班 ,且晚班后1天是休息
{
pbb[i][j]=2; pbbsc(pbb[i][j]);
j++;
pbb[i][j]=1; pbbsc(pbb[i][j]);
sbjsq=0;
xxjsq++;
}
else//行列不相等时执行下列条件
{
if(xxjsq<6)//当休息天数小于6天时随机排班
{
pbb[i][j]=rand()%2;
if(pbb[i][j]==1) //随机为休息时休息天数+1,连续上班天数归零
{
xxjsq++; pbbsc(pbb[i][j]);
sbjsq=0;
}
else //随机为上班时,连续上班天数+1
{
sbjsq++; pbbsc(pbb[i][j]);
if(sbjsq>4&&j<17)
{
j++;
pbb[i][j]==1; pbbsc(pbb[i][j]);
}
else
{

}
}
}
else //休息天数大于等于6天时,只排上班。
{
pbb[i][j]=0; pbbsc(pbb[i][j]);
}

}
}
}
getchar();
return 0;
}

pbb[17][17]定义的数组,下标是0-16,因此访问到17的时候就越界了,会修改掉前面的i,和j的值,因此看起来就是死循环。

把pbb[17][17]改成pbb[18][18]

温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-01-28
数组的下标是从0开始的,不是1-17,你的for循环的i,j的范围都错了,导致内存访问越界,破坏了循环
第2个回答  2023-01-24
for(;;)
{

// 循环体代码

}
相似回答