c语言文件操作,高分,速度

文本文件e:\a.txt中,按统一格式储存若干行信息,每行12个字符分别为8位学号(字符),3位成绩,1位交作业次数(整数).将所有成绩小于60分,作业次数小于4次的信息删除.

主要问题在于,如何让程序每行每行的读写.
具体步骤我知道,将数据读到内存,合适的写入B.txt
删除a.txt,重命名b.txt

要求完整的C编程码,要求是C.
在线等调试

#include <stdio.h>
struct cj{char num[8];int s,t;};
void main()
{ FILE *fp1,*fp2; cj a,b;
fp1=fopen("e:\c.txt","r");
fp2=fopen("e:\b.txt","w");
while(fscanf(fp1,"%8s%3d%1d\n",a.num,&a.s,&a.t),a.s>60&&a.t>4)
{ fscanf(fp2,"%8s%4d%1d\n",a.num,a.s,a.t);
}
fclose(fp1);
fclose(fp2);
remove("e:\a.txt");
rename("e:\b.txt","e:\a.txt");
}

执行自己的这个程序会出现错误,不知道为什么,没有编译问题.
重试.终止.忽略.
e:\\a.txt 修改了下还是不行
我知道肯定是那个while的地方出现了问题.请帮忙指出
b.txt已经出来,可是里面是空白的

scanf这个我已经发现了
有一个 stream!=NULL 问题,什么原因

#include <stdio.h>
void main()
{ FILE *f1,*f2; char num[9]; int s,t;
f1=fopen("e:\\a.txt","r");
f2=fopen("e:\\b.txt","w");
while(fscanf(f1,"%s%d%d",num,&s,&t)!=EOF)
if(s>60&&t>4) { fprintf(f2,"%s%d%d",num,s,t);}

fclose(f1);
fclose(f2);
remove("e:\\a.txt");
rename("e:\\b.txt","e:\\a.txt");
}

第1个回答  2009-06-18
先用fgets读取一行道缓冲区,再用sscanf从字符串中读取数据
循环如此直到feof
第2个回答  2009-06-18
第二个fscanf应该是fprintf

每行每行的读用gets 函数

char line[1000];
gets(line);

就可以。

fp1=fopen("e:\\a.txt","r");
fp2=fopen("e:\\b.txt","w");本回答被提问者采纳
相似回答