加个判断,当文件没结束的时候读数据,文件结束就不读了。
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);
}
已经改了您的程序.您再看看。
----------------解决方案--------------------------------------------------------
太感谢了哈,让你费了这么多心。我调试了下,程序可以正常的运行。
然后我又简化 了下,可以不用参数就可以了,将i赋给length了,其它程序就跟以前一样。还有你那个在输出b的时候i<length真是细心啊,如果只有少于10个数的话,没这个就又有问题了,呵呵。
谢谢谢谢
----------------解决方案--------------------------------------------------------
帮你顶一下吧。
----------------解决方案--------------------------------------------------------
应该是fscanf。不过这个程序我也试了下,不行的。
其实我就是想实现,从文件读入未知个数的数,然后计算输入的数据有多少个,将这些数再进行排序。
我开始用for循环200下读入数据结果没读入的数程序就按0计了,以致于后面按升序排的时候全是0,就是想找个方法使读入的数能真正成为数组的数,而其它就不读入。
----------------解决方案--------------------------------------------------------