Функция fseek() не возвращает ошибку при достижении конца файла - C (СИ)
Формулировка задачи:
Люди скажите может кто знает! Почему функция fseek() не возвращает ошибку при достижении конца файла??? Вот программа!
#include <stdio.h>
main()
{
FILE *fp;
long offset = 0L;
char c;
if ((fp=fopen("data","r")) ==0)
printf("ja ne mogu otkrytj fajl %s.\n","data");
else
{
while( fseek(fp,offset++,0)==0 )
putchar(c=getc(fp));// И тут пошло зацыкливание!!!
fclose(fp);
}
}Решение задачи: «Функция fseek() не возвращает ошибку при достижении конца файла»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main(void) /* ANSI C89 */
{
FILE *file;
long offset;
file = fopen("file.txt", "r");
offset = LONG_MAX-10;
while (fseek(file, offset++, 0) == 0)
;
printf("%ld" "\n", offset);
printf("%ld" "\n", ftell(file));
fclose(file);
exit(EXIT_SUCCESS);
}
Объяснение кода листинга программы
- Подключение необходимых библиотек: iostream.h, stdlib.h, limits.h
- Объявление функции main()
- Объявление переменных: file (указатель на файл), offset (долгое число)
- Открытие файла с помощью функции fopen()
- Инициализация переменной offset значением LONG_MAX-10
- Установка позиции чтения в файле на значение offset с шагом 10 с помощью функции fseek()
- Проверка позиции чтения в файле с помощью функции ftell()
- Закрытие файла с помощью функции fclose()
- Выход из программы с помощью функции exit()