簡體   English   中英

如何向后移動文件指針

[英]How to Move File Pointer Backwards

我目前正在處理文件,我想從文件指針已經通過的文件中讀取一個字符。 想象文件由以下字符組成:123456789

我想向前打印 3 個字符,從后面打印 1 個字符,輸出必須像:123234345456567678789

我試過這個,但它沒有打印任何東西。 我也試過 fseek 功能,但它仍然沒有打印任何東西。

while(c != EOF){
    for(int i=0; i<=2; i++){
            c = fgetc(fp);
            printf("%c", c);
        }
     fp -= 1;
}

對於所需的輸出,您可以使用fseek重置fp文件指針。

應該做的另一件事是將第一次讀取放在循環之外,否則,在第一次評估中, c還沒有從文件中讀取一個字符,如果c尚未初始化,這可能導致未定義的行為。

我還反轉了printffgetc語句,否則將打印EOF

運行示例

#include <stdio.h>

int main() {

    FILE *fp = fopen("file.txt", "r");

    if(!fp)
       return 1;

    int c;

    c = fgetc(fp);

    while(c != EOF) {
        for (int i = 0; i <= 2; i++) {
            printf("%c", c);
            c = fgetc(fp);         
        }
        fseek(fp, -2, SEEK_CUR);
    }
}

fseek確實有效,只需確保減去 2,而不是 1,因為調用fgetc將再次推進文件指針。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    int c = 0;
    FILE* fp = fopen("test", "r");
    int shouldBreak = 0;
    while (c != EOF) {
        for (int i = 0; i <= 2; i++) {
            c = fgetc(fp);
            if (c == EOF) {
                shouldBreak = 1;
                break;
            }
            printf("%c", c);
        }
        if (shouldBreak) {
            break;
        }
        fseek(fp, -2, SEEK_CUR);
    }
    printf("\n");
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM