在动态数组中搜索

时间:2016-01-31 18:30:05

标签: c arrays search

我试图将文件FILE1中的N个数字读入数组 然后对这些数字进行排序;然后在数组中搜索数字(每行1个,在FILE2中给出)。对于每个输入数字。

但是当我运行这段代码时,它会给出“细分”。请帮我纠正这段代码。 继承我的代码:

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include<string.h>
 int size=32;
 int main(int argc,char* argv[])
 {

     FILE *fp1=fopen("myFile1.txt","r");
     if (fp1 == NULL)
     {
            printf("cannot open this file");
            exit(0);
     }
    FILE *fp2 = fopen("test1.txt", "w");
    if (fp2 == NULL) 
    {
         printf("cannot open this file");
         exit(0);
    }
    FILE *fp3=fopen("myFile2.txt","r");
    if (fp3 == NULL)
    {
            printf("cannot open this file");
            exit(0);
    }
    int i=0,k,j,l,num,temp,m,c,d,Y,l1,u,mid,X,Z;
    int *B;
    int *C;
    int n;
    B= malloc(sizeof(int)*size);
    while(fscanf(fp1,"%d",&num)==1)
   {
         if(i<size)
        {
            B[i]=num;
            i++;
        }  
        else
        {
             C = malloc(sizeof(int)*2*size);
             for(m=0;m<size;m++)
             {
               C[m]=B[m];
             }
             free(B);
             size=size*2;
             B=&C[0];

        }

}

for(j=0;j<size;j++)
{
    for(l=0;l<size-1;l++)
    {
        if(B[l]>B[l+1])
        {
            temp=B[l];
            B[l]=B[l+1];
            B[l+1]=temp;
        }
    }
}
for(j=0;j<size;j++)
   fprintf(fp2,"%d  ",B[j]);


Y=0;
while(fscanf(fp3,"%d",&X)==1)
{
  for(i=0;i<n;i++)
  {
             if(B[i]==X)
            {
                 Y=1;
                 Z=i+1;
                 break;
            }
            else
            {
                if(X<B[i])
                {
                    Z=i+1;
                    Y=0;
                    break;
                }
                if(X>B[n-1])
                {
                    Z=n;
                    Y=0;
                    break;
                }
           }
   }

   if(Y==1)
        printf("number %d found at %d",X,Z);
      else
      printf("number not found");
  }


  return 0;
  fclose(fp1);
  fclose(fp2);
  fclose(fp3);

}

1 个答案:

答案 0 :(得分:0)

你永远初始化'n'变量并制作一些东西。 只需将它放在 unsigned int n = 0 中,使得sur为正数,在程序开头为0,否则设置为循环将永远不会使用:

int i=0,k,j,l,num,temp,m,c,d,Y,l1,u,mid,X,Z; int *B; int *C; unsigned int n = 0;//here

我希望能帮到你,