C++ 函数调用显示的错误行为

C++ 函数调用显示的错误行为,c++,function,function-calls,C++,Function,Function Calls,在下面的代码中,对isregistered(const struct*,int)的函数调用显示了一种错误行为,它没有进入函数定义来编译代码,它什么也不做,也没有停止程序的编译 此函数调用显示异常行为的isRegistered(const struct*,int)函数 bool isRegistered(const Prefix* p, const char* str, char area[],char publisher[], char title[]) { int a=0,b,c,i,

在下面的代码中,对isregistered(const struct*,int)的函数调用显示了一种错误行为,它没有进入函数定义来编译代码,它什么也不做,也没有停止程序的编译

此函数调用显示异常行为的isRegistered(const struct*,int)函数

bool isRegistered(const Prefix* p, const char* str, char area[],char publisher[], char title[])
{
    int a=0,b,c,i,k,m,n,flag=0,rarr;
    int arr[14];
    double l,j;
    int area1[20]={0};
    int area2[20];
    Prefix pre;
    pre=*p;
    for(i=0;i<13;i++)
    {
         arr[i]=str[i]-48;
    }
    a=arr[0]*100+arr[1]*10+arr[2];

    if((a==978)||(a==979))
        flag++;

    k=0;
    i=7;
    n=4;
    m=0;
    while(m<5)
    {
         i=i-k;
         j=0;
        while(i>2)
        {
            l=pow(10,j);
            area1[k]+=arr[i]*l; /*+a[i-1]*10*1+a[i-2]*10*10+a[i-3]*10*10*10+a[i-4]*10*10*10*10;*/
            i--;
            j++;
        }
        i=7;   
        area2[n]=area1[k];
        k++;
        n--;
        m++;
    } 
    i=0;
    while((i<5)||(a==1))
    {
        rarr=area2[i];
        cout<<rarr<<endl;
        //if(isRegistered(&pre, rarr)==1)
        //return 1;

        //Here this is the problem area .
        b=isRegistered(&pre ,rarr);      ***The erroneous behaviour occurs here. ***
        i++;
    }
    cout<<endl;              
    //isRegistered(const Prefix* p, int area, const char* publisher)
    return a;
}
bool已注册(常量前缀*p,常量字符*str,字符区域[],字符发布者[],字符标题[])
{
int a=0,b,c,i,k,m,n,flag=0,rarr;
int-arr[14];
双l,j;
int AREA 1[20]={0};
国际2区[20];
前缀pre;
pre=*p;

对于(i=0;我请。这是一个大量的代码。您能将其减少到产生错误的最小示例吗?完成..我已更新代码看起来好像有人忘记更新
i
的值:)仔细看看第二个代码段中的while循环。一旦你进入该while循环,你就再也不会回来了!看看第一个代码段,我发现这个问题并不存在,尽管其中一个while循环似乎存在明显的问题。如果你在while循环中执行这个
,会发生什么((哎哟..好吧,这么小的一个错误让我疯狂了好几个小时,无论如何,非常感谢。现在它工作得很好。:)
bool isRegistered(const Prefix* pre, int area)
{
    cout<<"hello";
    int i=0,flag;
    cout<<"hello";
    if(area<8)
    {
        return 1;
    }
    else
    {
        while(i<615)
        {
            if(area==(pre->area[i]))
            {
                flag=1;
            }
            else
            {
                flag=0;
            }
        }
    }
    if(flag==1)
        return 1;
    else
        return 0;
}