1 行だけが残るか、すべての行が使い果たされるまで、ファイル内の 2 行ごとにスワップすることになっています。その際に別のファイルを使用したくありません。
これが私のコードです:
#include <stdio.h>
int main() {
FILE *fp = fopen("this.txt", "r+");
int i = 0;
char line1[100], line2[100];
fpos_t pos;
fgetpos(fp, &pos);
//to get the total line count
while (!feof(fp)) {
fgets(line1, 100, fp);
i++;
}
i /= 2; //no. of times to run the loop
rewind(fp);
while (i-- > 0) { //trying to use !feof(fp) condition to break the loop results in an infinite loop
fgets(line1, 100, fp);
fgets(line2, 100, fp);
fsetpos(fp, &pos);
fputs(line2, fp);
fputs(line1, fp);
fgetpos(fp, &pos);
}
fclose(fp);
return 0;
}
this.txt の内容:
aaa
b
cc
ddd
ee
ffff
gg
hhhh
i
jj
プログラム実行後のコンテンツ
b
aaa
ddd
cc
ddd
c
c
c
i
jj
同じ間違った結果を得るためにfseek
、代わりに使用してみました。fgetpos
私が考えたところでは、2 番目の while ループが 2 回実行された後(つまり、最初の 4 行が処理された後)、カーソルは 17 番目のバイトにあるはずです(への呼び出しによって返されるftell(fp)
) 。 4 行目以降の内容は変更されておらず、ループの 3 回目の実行時に何らかの理由fgets
で呼び出されると、配列 line1 と line2 に読み込まれる内容はそれぞれ "c\n" と "ddd\n" になります。
繰り返しますが、これを達成するために別のファイルを使用したくありません。画面の背後で何が問題になっているのかを正確に把握する必要があるだけです
任意のリードをいただければ幸いです。ありがとうございました。