1

ファイルから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

以下のコードのように、追加モード (aまたは) でファイルを開きましたか?a+

fopen(fp, "a")`

ドキュメントには、追加モードは再配置を受け入れないと記載されています。

append : ファイルの末尾で出力用にファイルを開きます。出力操作では、常にファイルの末尾にデータが書き込まれ、展開されます。再配置操作 (fseek、fsetpos、rewind) は無視されます。ファイルが存在しない場合は作成されます。

rその場合は、次のように read - - または read/update - r+- モードで開いてみることをお勧めします。

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