好吧,在向后读取我的文件并确保我不在顶部时,在调试器中,我意识到ftell停止返回位置了,有人可以说清楚吗?
int Dtl(Acc *user)
{
FILE *dtl_Fp;
trans_Pass dislog[10];
int i=0,x=-1,r_Val;
My_Convertor();
dtl_Fp=Opnfile("Tempfile",r_B,dnt_ret_fp);
system("cls");
printf("Types Format\nW-Withdraw\tDep-Deposit\tSch-Pay School Fee\n\nID:NO\tTyp:Amount\t\tDate\n");
while (1)
{
fseek(dtl_Fp,sizeof(trans_Pass)*(x),SEEK_END);
fread(&dislog[i],sizeof(trans_Pass),1,dtl_Fp);
r_Val=ftell(dtl_Fp);
if ((ftell(dtl_Fp)==0)){break;}
if(dislog[i].id_No==user->id_No){printf("%s\n\n",dislog[i].info);}
i++;x--;
}
fclose(dtl_Fp);
}
最佳答案
它可能与以下内容有关:
r_Val=ftell(dtl_Fp);
if ((ftell(dtl_Fp)==0)){break;}
您两次调用ftell(),但从未使用r_val。
代码段中没有任何内容可以让我看到fseek()中的参数
sizeof(trans_Pass)*(x)
的值,但是如果它不是合法值(0,文件大小),则可能导致意外结果。无法保证
ftell()
不返回-1。您没有检查。在出现错误情况时,ftell返回-1,然后将errno设置为非零值,该值可用于获取有关错误性质的信息。