1

我正在尝试从文件中读取一行并返回刚刚读取的行的开头:

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 上。

4

1 回答 1

3

您是否使用附加模式(aa+)打开文件,如下面的代码所示?

fopen(fp, "a")`

文档指出附加模式不接受重新定位:

append:在文件末尾打开文件以进行输出。输出操作总是在文件末尾写入数据,扩展它。重新定位操作(fseek、fsetpos、rewind)被忽略。如果文件不存在,则创建该文件。

如果你这样做了,我建议你尝试用 read - r- 或 read/update - r+- 模式打开它,如:

fopen(fp, "r")`
于 2016-06-30T18:43:19.507 回答