[英]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
尚未初始化,這可能導致未定義的行為。
我還反轉了printf
和fgetc
語句,否則將打印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.