当前位置: 代码迷 >> C语言 >> [讨论]关于从文件读入数据的问题!
  详细解决方案

[讨论]关于从文件读入数据的问题!

热度:252   发布时间:2006-08-04 21:25:31.0

加个判断,当文件没结束的时候读数据,文件结束就不读了。
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个数的话,没这个就又有问题了,呵呵。
谢谢谢谢
----------------解决方案--------------------------------------------------------
帮你顶一下吧。
----------------解决方案--------------------------------------------------------
以下是引用ChinaTang在2006-8-2 16:37:03的发言:

应该是fscanf。不过这个程序我也试了下,不行的。
其实我就是想实现,从文件读入未知个数的数,然后计算输入的数据有多少个,将这些数再进行排序。
我开始用for循环200下读入数据结果没读入的数程序就按0计了,以致于后面按升序排的时候全是0,就是想找个方法使读入的数能真正成为数组的数,而其它就不读入。


我每次都是这样从文件读入数据的,怎么会有错哦!
----------------解决方案--------------------------------------------------------
  相关解决方案