首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

调试程序时遇到一个很古怪的有关问题

2012-09-28 
调试程序时遇到一个很古怪的问题。/*n个人围成一圈,顺序排号,从第1个人开始报数(从1到3报数),凡报到3的人退

调试程序时遇到一个很古怪的问题。
/*n个人围成一圈,顺序排号,从第1个人开始报数(从1到3报数),
凡报到3的人退出圈子,问最后留下的是原来第几号的那个人。*/
我输入的人数是n为8,并且在程序中设定了 k<=n-1,结果在调试时,居然发现k值能取到14,
好奇怪啊啊啊。

#include <stdio.h>
int main()
{ int turn(int );
  int n;
  printf("how many people are there?\n");  
  scanf("%d",&n);  
  printf("the last number is:%d\n",turn(n));
  system("pause");  
  return 0;  
}
  int turn(int n)
{ int *p,array[100],i,m,k;  
  for(p=array,i=0;i<n;i++) 
  *(p+i)=i+1;  
  for(i=0,m=1;n>=3&&*(p+i)!='\0';i++,m++)  
  { if(m==3) 
  { for(k=i;k<=n-1;k++)
  *(p+k)=*(p+k+1); //我输入的n是8,为什么调试的时候k值能取到14呢? 
  *(p+n-1)='\0';
  n--; //随着筛选,总个数逐渐减少。 
  m=0;  
  }  
  if(*(p+i+1)=='\0'&&n>=3) i=-1; //要是下一个数为空,就返回第一个数继续筛选。 
  } 
  return i+1;  
}


[解决办法]
建议用链表做这题,你写的我看着有点乱。
[解决办法]

C/C++ code
#include <stdio.h>int main(){     int turn(int );    int n;    printf("how many people are there?\n");       scanf("%d",&n);       printf("the last number is:%d\n",turn(n));    system("pause");       return 0;   }int turn(int n){     int *p,array[100],i,m,k;       for(p=array,i=0;i<n;i++)          *(p+i)=i+1;    *(p+i)='\0';//放到这儿    for(i=0,m=1;n>=2&&*(p+i)!='\0';i++,m++) //最后只能有一个数留下,所以n>=2.      {         if(m==3)          {            for(k=i;k<=n-1;k++)                *(p+k)=*(p+k+1); //*(p+8)=?            //*(p+n-1)='\0';            n--;             m=0;            i--;//你把数组里的数删除了,i最后还要加1,所以这儿先减1.        }           if(*(p+i+1)=='\0'&&n>=2)             i=-1;     //return i+2;      return array[0];//}//既然会调试,那为啥你找不出原因呢? 

热点排行
Bad Request.