/* Эта программа открывает файл letters.txt и печатает
в него буквы от A до Z. После этого программа
с помощью цикла считывает буквы в обратном порядке от
Z до A и выводит их на экран */
#include <stdio.h>
#include <stdlib.h>
FILE * fptr;
main()
{
char letter;
int i;
fptr = fopen("C:\\users\\deanwork\\documents\\
letters.txt","w+");
if (fptr == 0)
{
printf("При открытии файла произошла ошибка.\n");
exit(1);
}
for (letter = 'A'; letter <= 'Z'; letter++)
{
fputc(letter, fptr);
}
puts("Завершена запись букв от A до Z");
// Чтение файла в обратной последовательности
fseek(fptr, -1, SEEK_END); // Минус 1 байт с конца
printf("Данные файла в обратном порядке:\n");
for (i = 26; i > 0; i--)
{
letter = fgetc(fptr);
// Чтение буквы и возврат на 2 позиции
fseek(fptr, -2, SEEK_CUR);
printf("The next letter is %c.\n", letter);
}
fclose(fptr); // Повторимся, всегда закрывайте файлы
return(0);
}
我不明白为什么该行fseek(fptr, -2, SEEK_CUR);使用偏移量向后两个位置(字节),让我们取一行文本Ashot,假设我的指针指向字母t,要打印字母o,您需要向后移动 1 个字节,为什么你需要移动 2 个字节?
fgetc 除了读取一个字符外,还将文件中的指针向前移动一个位置。由此可见:为了读取刚刚读取的字符之前的字符,您需要将指针向后移动两个位置。