c语言 逐行读取文本文件的数时,如何判断每行已经结束,然后读下一行

c语言 逐行读取文本文件的数时,怎么判断每行已经结束,然后读下一行
设计一个程序,从in.txt读入数据,对每一行的数字都单独按从大到小的顺序排序,将结果输出到out.txt。每一行的数字第一个字符是数字标志,每个数字之间用空格隔开。如:
读入:5 10 -20 2000 36 -100
输出:2000 36 10 -20 -100(注意5只是个开始标志)。
代码我写了一些,中文注释的地方表示有错误,不知道怎么搞了,求牛人帮忙指点,谢谢!
(要用c语言写)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

void insertsort(int a[],int n)//插入排序算法
{
int i=0,j=0;
int x;
for(i=1;i<=n-1;i++)
{

x=a[i];
for(j=i-1;j>=0;j--)
if(x<a[j])
a[j+1]=a[j];
else break;
a[j+1]=x;
}
}
void main()
{
FILE *fp,*fo;
fp=fopen("d:\\file\\in.txt","r");
fo=fopen("d:\\file\\out.txt","w");
int a[1000];
int i=0;
int j=0;
memset(a,0,sizeof(a));
while(!feof(fp))
{
fgetc(fp);
i=0;
while(1)
{
fscanf(fp,"%d",&a[i]);
if(a[i]=='\n')break;//这个判断好像没用,就这里有问题吧,
else i++;
}
insertsort(a,i);
j=0;
while(j<=i)
{
fprintf(fo,"%d",a[j++]);
// printf("啊啊啊啊啊啊啊啊啊啊啊啊啊啊\n");
}
fprintf(fo,"\0");
// printf("啊啊啊啊啊啊啊啊啊啊啊啊啊啊\n");
}
fclose(fp);
fclose(fo);
}

------解决方案--------------------
fgets直接读取一行,然后根据字符串的长度处理就是了。
------解决方案--------------------
if(a[i]=='\n')break;//这个判断好像没用,就这里有问题吧,

把这句改成if(getchar() == '\n') break;就行了
------解决方案--------------------
如果LZ要这样,
while(1)
{
char k;
k=fgetc(fp);
if(k=='\0')break;
else
ungetc(k,fp);
fscanf(fp,"%d",&a[i]);
//这个判断好像没用,就这里有问题吧,
else i++;
}
看行不,以前还没有用过ungetc,学习了
------解决方案--------------------
给你演示了一下读一行的,扩展一下就行了。
读到'\n'时排个序输出到文件里,num是数组。
C/C++ code

i = 0;
ch = fgetc(in);
while(ch != EOF){
    if(ch >= '0' && ch <= '9'){
        ungetc(ch, in);
        fscanf(in, "%d", &num[i++]);
    } else if(ch == '\n'){
        i = 0;//为num重新读做准备
        //给num数组排序,输出到文件
    }
    ch = fgetc(in);
}