两个附件一个是原程序文件,一个是输入文件。我把原程序文件改成 了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++;
}
----------------解决方案--------------------------------------------------------
少了&,不好意思。
while(EOF!=(fscanf("%d",&xx[i]))&&i<200)
{
i++;
}
应该是fscanf。不过这个程序我也试了下,不行的。
其实我就是想实现,从文件读入未知个数的数,然后计算输入的数据有多少个,将这些数再进行排序。
我开始用for循环200下读入数据结果没读入的数程序就按0计了,以致于后面按升序排的时候全是0,就是想找个方法使读入的数能真正成为数组的数,而其它就不读入。
----------------解决方案--------------------------------------------------------
少了&,不好意思。
while(EOF!=(scanf("%d",&xx[i]))&&i<200)
{
i++;
}
按这个也什么不能显示
----------------解决方案--------------------------------------------------------
先谢谢楼上的哈,不过按你这个我去调试了下,不行啊,程序什么也不能输出也不能显示,当然调试没错。再看下怎么改啊!
您把改后的程序贴上来,我再看看。
----------------解决方案--------------------------------------------------------
两个附件就是原程序和 in.txt
原程序也贴出来了的嘛
----------------解决方案--------------------------------------------------------