帮小弟我看看小弟我的程序为什么只循环了2次就不循环了(c++)

帮我看看我的程序为什么只循环了2次就不循环了(c++)
我编写了一个小程序,用于输出一个正弦函数(输入信号)的局部最大值和局部最小值(就是为了求信号的包络),数组a是存放输入信号的X坐标值,数组b是存放输入信号的y值,数组c用于存放局部最大值的x坐标,数组d用于存放局部最大值的y坐标,数组e用于存放局部最小值的x坐标,数组f用于存放局部最大值的y坐标,最后用txt的形式把a b c d e f以txt形式输出,结果发现a和b输出的数据都是正确的,而c d e f。txt中的数据发现只循环了2次就不循环了(本应该循环1000次),请问各位高手为什么,真麻烦你们了,非常感谢,紧急。

程序如下:

// singalprogram1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <string>
#include <fstream>
#include <iostream>
#include <math.h>
using namespace std;
#define pi 3.1415926

void findpeak (float[],float[]);
extern int maxnum;
extern int minnum;

int _tmain(int argc, _TCHAR* argv[])
{
float a[2000];
float b[2000];
int i=0;
ofstream outx("x.txt");
if(!outx)
{
cout<<"file error!";
return 0;
}
ofstream outy("y.txt");
if(!outy)
{
cout<<"file error!";
return 0;
}
ofstream outa("a.txt");
if(!outa)
{
cout<<"file error!";
return 0;
}
ofstream outb("b.txt");
  if(!outb)
{
cout<<"file error!";
return 0;
}

float x = 0;
float y = 0;

for ( ; x<2 ; x+=0.001)
{
y = sin(2*pi*x);
outx<<x<<" ";
outy<<y<<" ";
a[i]=x;
b[i]=y;
i++;
}
cout<<"finish\n";
outx.close();
outy.close();
  for(i=0;i<1999;i++)
{
outa<<a[i]<<" ";//用于检验数组是否成功传输
}
for(i=0;i<1999;i++)
{
outb<<b[i]<<" ";
}
//float x[4]={0,0.5,1,1.5};
//float y = 0;
//for (int i=0;i<4;++i)
//{
// cout<<sin(x[i]*pi)<<endl;
//}

findpeak (a,b);
  return 0;

}
void findpeak (float a[],float b[])//求包络
{
float c[1000]={0};float d[1000]={0};float e[1000]={0};float f[1000]={0};
int i=0;int j=1;int k=1;
  c[0]=a[0];//端点值
d[0]=b[0];
e[0]=a[0];
f[0]=b[0];
int maxnum=0;
int minnum=0;
for(i=0;i<1998;i++)
{
if(b[i+1]>b[i]&&b[i+1]>b[i+2])
{
c[j]=a[i+1];
d[j]=b[i+1];
j++;
}
maxnum=j;
if(b[i+1]<b[i]&&b[i+1]<b[i+2])
{
e[k]=a[i+1];
f[k]=b[i+1];
k++;
}
minnum=k;
}

c[maxnum]=a[2000];//端点值
d[maxnum]=b[2000];
e[minnum]=a[2000];
f[minnum]=b[2000];


ofstream outc("c.txt");
if(!outc)
{
cout<<"file error!";

}

 for(i=0;i<999;i++)
{
outc<<c[i]<<" ";//用于检验数组是否成功传输
}

  ofstream outd("d.txt");
if(!outd)
{
cout<<"file error!";

}

 for(i=0;i<999;i++)
{
outd<<d[i]<<" ";//用于检验数组是否成功传输
}
  ofstream oute("e.txt");
if(!oute)
{
cout<<"file error!";

}

 for(i=0;i<999;i++)
{
oute<<e[i]<<" ";//用于检验数组是否成功传输
}
  ofstream outf("f.txt");
if(!outf)
{
cout<<"file error!";

}

 for(i=0;i<999;i++)
{
outf<<f[i]<<" ";//用于检验数组是否成功传输
}
cout<<maxnum;
cout<<minnum;
}



非常感谢!!

------解决方案--------------------
C/C++ code

void findpeak (float a[],float b[])//求包络

------解决方案--------------------