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

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

热度:358   发布时间:2006-07-31 16:45:32.0
[讨论]关于从文件读入数据的问题!



两个附件一个是原程序文件,一个是输入文件。我把原程序文件改成 了txt文件。我学习C语言也不久,想请教下高手,谢谢。(其实就一般的数字排序程序就可以了的,不过我只是随便拿了个程序哈^_^.........)
我的问题就是当从文件输入200个数据,然后将它的后三位进行排序(这个不是重点,没啥关系),主要是如果我只输入20个数据,并且我是升序排列,(if(xx[i]%1000>xx[j]%1000 )最后要球输出10个数据,问题就来了,结果全部都是0,我想程序一定以为我输入的20个数据以后的全部按0计,如果我把它改成降序的话,(if(xx[i]%1000<xx[j]%1000) 结果又能正确的显示出来。我想问下用什么方法能使读入数据时不读我文件中没有的,只读真实输入的。(不要改200个为自己想输入的个数)。我做过以前的字符相同输入问题可以通过一个if语句:if(xx[i]!='\0') ........//xx[]是字符串数组,这样就可以了。但是这个int型的数据用这个好像就不行了。那应该用什么方法来解决呢?还是把代码贴上吧。


#include <stdio.h>
#include <string.h>
#include <conio.h>
int xx[200],b[10];
int maxline=0;
void jsSort()
{int i,j,t;
for(i=0;i<199;i++)
{
for(j=i+1;j<200;j++)
{ if(xx[i]!='\0')
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++) b[i]=xx[i];

}

void main()

{

readDat();

jsSort();

writeDat();
system("pause");
}

readDat()

{

FILE *in;

int i;

in=fopen("in.txt","r");
for(i=0;i<200;i++)
{
fscanf(in,"%d",&xx[i]);}

fclose(in);
}

writeDat()

{

FILE *out;

int i;
out=fopen("out.dat","w");
for(i=0;i<10;i++){
printf(" %d ",b[i]);
fprintf(out,"%d\n",b[i]);
}

fclose(out);

}

搜索更多相关的解决方案: 数据  文件  结果  

----------------解决方案--------------------------------------------------------
顶 一下
----------------解决方案--------------------------------------------------------
for(i=0;i<200;i++)
{
fscanf(in,"%d",&xx[i]);}

=============>
i=0;
while(fscanf(in,"%d",&xx[i++]));
再把后面的200改成i(即读入的数的个数)来控制循环次数。


----------------解决方案--------------------------------------------------------
先谢谢楼上的哈,不过按你这个我去调试了下,不行啊,程序什么也不能输出也不能显示,当然调试没错。再看下怎么改啊!
----------------解决方案--------------------------------------------------------
/*数据读入*/

#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endf
i=0;
while(EOF!=(scanf("%d",xx[i]))&&i<200)
{
i++;
}
----------------解决方案--------------------------------------------------------
少了&,不好意思。
while(EOF!=(scanf("%d",&xx[i]))&&i<200)
{
i++;
}
----------------解决方案--------------------------------------------------------
以下是引用nuciewth在2006-8-2 15:50:10的发言:
少了&,不好意思。
while(EOF!=(fscanf("%d",&xx[i]))&&i<200)
{
i++;
}

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


----------------解决方案--------------------------------------------------------
以下是引用nuciewth在2006-8-2 15:50:10的发言:
少了&,不好意思。
while(EOF!=(scanf("%d",&xx[i]))&&i<200)
{
i++;
}

按这个也什么不能显示


----------------解决方案--------------------------------------------------------
以下是引用ChinaTang在2006-8-2 15:37:17的发言:
先谢谢楼上的哈,不过按你这个我去调试了下,不行啊,程序什么也不能输出也不能显示,当然调试没错。再看下怎么改啊!

您把改后的程序贴上来,我再看看。
----------------解决方案--------------------------------------------------------

两个附件就是原程序和 in.txt
原程序也贴出来了的嘛


----------------解决方案--------------------------------------------------------
  相关解决方案