加个判断,当文件没结束的时候读数据,文件结束就不读了。
for(i=0;i<200;i++)
{
if(!feof(in))
fscanf(in,"%d",&xx[i]);
else break;
}
此时的i就是读入的数的个数。
再对这i个数排序就好,并输出这i个排序后的数就行,
您的问题出在总是把循环的上限都写成200,读出读入总要200次。
实际上,只要把循环上限写为i即可。
对不礼貌的女生收钱......
/*这份代码经源码格式软件格式化过
yang_hx@neusoft.com */
#include <stdio.h>
#include <string.h>
#include <conio.h>
int xx[200],b[10];
int maxline=0 ;
void jsSort(int length)
{
int i,j,t ;
for(i=0;i<length-1;i++)
{
for(j=i+1;j<length;j++)
{
if(xx[i]%1000<xx[j]%1000||(xx[i]%1000==xx[j]%1000)&&(xx[i]<xx[j]))
{
t=xx[i];
xx[i]=xx[j];
xx[j]=t ;
}
}
}
for(i=0;i<10&&i<length;i++)b[i]=xx[i];
}
main()
{
int length;
length=readDat();
jsSort(length);
writeDat(length);
system("pause");
}
readDat()
{
FILE*in ;
int i ;
in=fopen("in.dat","r");
for(i=0;i<200;i++)
{
if(!feof(in))
fscanf(in,"%d",&xx[i]);
else
break;
}
fclose(in);
return i;
}
writeDat(int length)
{
FILE*out ;
int i ;
out=fopen("out.dat","w");
for(i=0;i<10&&i<length;i++)
{
printf(" %d ",b[i]);
fprintf(out,"%d\n",b[i]);
}
fclose(out);
}
已经改了您的程序.您再看看。