----------------解决方案--------------------------------------------------------
下面这个干什么的?
while(1)
{ i++;
if((test=(rand()%79+a[0]))==a[i])
break;
if(i>=6)
i=0;
}
----------------解决方案--------------------------------------------------------
发现一个问题:for循环访问了一个数组之外的元素
[bo]以下是引用 [un]xianshizhe111[/un] 在 2008-3-7 00:58 的发言:[/bo]
#include "stdio.h"
#include<stdlib.h>
#include<time.h>
int main()
{
int a[6]={10,20,33,4,44,88};
int i=0,test;
int stime;
long ltime;
ltime=time(NULL);
stime=(unsigned int )ltime;
srand(stime);
while(1)
{ i++;
if((test=(rand()%79+a[0]))==a[i]) // i 超出范围
break;
if(i>=6) i=0;
}
for(i=0;i<6;i++)
if(test==a[i])
{
a[i]=a[i+1]; // 在i 为5 时 i + 1 == 6,这样就超出了数组的范围
test=a[i];
}
for(i=0;i<5;i++)
printf("%d ",a[i]);
return 0;
}
#include "stdio.h"
#include<stdlib.h>
#include<time.h>
int main()
{
int a[6]={10,20,33,4,44,88};
int i=0,test;
int stime;
long ltime;
ltime=time(NULL);
stime=(unsigned int )ltime;
srand(stime);
while(1)
{ i++;
if((test=(rand()%79+a[0]))==a[i]) // i 超出范围
break;
if(i>=6) i=0;
}
for(i=0;i<6;i++)
if(test==a[i])
{
a[i]=a[i+1]; // 在i 为5 时 i + 1 == 6,这样就超出了数组的范围
test=a[i];
}
for(i=0;i<5;i++)
printf("%d ",a[i]);
return 0;
}
[[it] 本帖最后由 cosdos 于 2008-3-9 23:46 编辑 [/it]]
----------------解决方案--------------------------------------------------------
再考虑,考虑(如:超出之外,返回来再重新测试该做如何处理).
----------------解决方案--------------------------------------------------------
while(1)
{ i++;
if((test=(rand()%79+a[0]))==a[i])
break;
if(i > 4) // !
i=0;
}
for(i=0;i<5;i++) // 即 (6 - 1)
if(test==a[i])
{
a[i]=a[i+1];
test=a[i];
}
----------------解决方案--------------------------------------------------------
for(i = 0; (test=(rand() % 79 + a[0])) != a[i]; i = ( (i < 5) ? (i + 1) : 0) );
[[it] 本帖最后由 cosdos 于 2008-3-9 23:55 编辑 [/it]]
----------------解决方案--------------------------------------------------------
int a[6]={10,20,33,4,44,88};
while(1)
{ i++;
if((test=(rand()%79+a[0]))==a[i])
break;
if(i>=500) i=0;
}
----------------解决方案--------------------------------------------------------