我试图将文件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);
}
答案 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
我希望能帮到你,