读数据问题求教
数据文件里是一行一行的,每行三个数据,以空格分隔,当时写文件用的格式是%u %u %E,我现在想从最后一行开始,一行一行往前读,该怎么写程序呢?(每次读完一行之后,该移动指针多少才能读上一行呢?)谢谢!
[解决办法]
fseek是以字节为单位的。没有以行为单位的类seek语句。
#include <stdio.h>FILE *f;int c;long offset;char ln[100];int d1,d2;double e;void main() { f=fopen("a.txt","rb");//必须用b方式打开,否则文件当前读位置会受\x0d \x0a \x1a等字符的干扰 fseek(f,-1,SEEK_END);//倒数最后一个字节之前 while (1) { c=fgetc(f); if ('\n'==c) { offset=ftell(f);//记住当前位置,即刚读字符后面 fgets(ln,100,f); sscanf(ln,"%d%d%lf",&d1,&d2,&e); printf("%u %u %E\n",d1,d2,e); fseek(f,offset-2,SEEK_SET);//回到刚才读位置之前一个位置,即c所在位置之前一个位置 } else if (fseek(f,-2,SEEK_CUR)) {//回到刚才读位置之前一个位置,即c所在位置之前一个位置失败,说明已读到文件开头 fseek(f,0,SEEK_SET); fgets(ln,100,f);//读文件第一行内容 sscanf(ln,"%d%d%lf",&d1,&d2,&e); printf("%u %u %E\n",d1,d2,e); break; } } fclose(f);}