当前位置: 代码迷 >> C语言 >> 新手求助 急!急!!急!!!
  详细解决方案

新手求助 急!急!!急!!!

热度:166   发布时间:2008-03-07 09:33:01.0
强人  楼上
----------------解决方案--------------------------------------------------------
下面这个干什么的?

  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;
}


[[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;
  }
----------------解决方案--------------------------------------------------------
  相关解决方案