【发布时间】:2016-06-30 18:37:03
【问题描述】:
我正在尝试从文件中读取一行并返回刚刚读取的行的开头:
FILE *fp = fopen("C:\\F2BJROP1.phn", "r+");
while(1){
/**Data reading**/
fscanf(fp, "%f", &temp1);
if(feof(fp))
break;
if(isvoiced(temp1)==1){ /** isvoiced() has nothing to do with this fp. **/
pos = ftell(fp);
voicedIntervs[k++] = temp1;
fscanf(fp, "%f", &temp1);
voicedIntervs[k++] = temp1;
fseek(fp, pos, SEEK_SET); /** Trying to go back to pos **/
}
}
但是在 fseek 之后,我观察到 fp 跳向 EOF。我希望我的 fp 回到存储在 pos 中的位置。 在程序的任何地方都没有声明其他 fp。
我知道 fp 达到 EOF,因为我调试并看到了值。
我使用的是 Windows 10。
【问题讨论】:
-
与使用
feof相比,测试fscanf的返回值(成功读取的项目数)会更好。你也没有检查下一次使用fscanf...不好! -
@Weather Vane :好的,但我的要求是 fseek 应该将文件指针重新定位到存储在变量 fp 中的位置
-
我看到你刚刚编辑了你的代码。所以这不是你的代码。请张贴Minimal, Complete, and Verifiable example,显示您已尝试过的内容。
-
没有minimal reproducible example,我们无法提供帮助。你的举动。
-
请添加打开文件的行(对 fopen 的调用),并说明您的操作系统。