Работа с бинарными файлами, параметры функции fseek: вывести на экран пятое по счету число - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вот имеется файл,в котором содержатся 7 вещественных чисел 1.03 2.07 4.015 2.38 5.78 9.34 8.41 Нужно вывести на экран пятое по счету число. Если бинарный файл,это файл прямого доступа,то,по идее,используя функцию fseek() я могу сместиться на нужное число значений и получить пятое число То есть в данном случае код будет выглядеть вот так:
Листинг программы
  1. int main()
  2. {
  3. FILE *f;
  4. double buf;
  5. f=fopen("data.bin","rb");
  6. fseek(f,5*sizeof(float),SEEK_SET);
  7. fscanf(f,"%lf",&buf);
  8. printf("%lf",buf);
  9. fclose(f);
  10. return 0;
  11. }
А если у меня будут числа вида 1 2 3 4 5 То код будет вот таким
Листинг программы
  1. int main()
  2. {
  3. FILE *f;
  4. double buf;
  5. f=fopen("data.bin","rb");
  6. fseek(f,2*sizeof(float),SEEK_SET);
  7. fscanf(f,"%lf",&buf);
  8. printf("%lf",buf);
  9. fclose(f);
  10. return 0;
  11. }
Или таким
Листинг программы
  1. int main()
  2. {
  3. FILE *f;
  4. double buf;
  5. f=fopen("data.bin","rb");
  6. fseek(f,7,SEEK_SET);
  7. fscanf(f,"%lf",&buf);
  8. printf("%lf",buf);
  9. fclose(f);
  10. return 0;
  11. }
Может кто-нибудь объяснить,почему нужно именно так? То есть мне не совсем понятен второй параметр в функции fseek,почему он именно такой и от чего он зависит ?

Решение задачи: «Работа с бинарными файлами, параметры функции fseek: вывести на экран пятое по счету число»

textual
Листинг программы
  1.     float arr[7] = { 1.03, 2.07, 4.015, 2.38, 5.78, 9.34, 8.41 };
  2.     //float arr[7] = { 1, 2, 3, 4, 5, 6, 7 };
  3.  
  4.     int i;
  5.     float num;
  6.     FILE* f;
  7.     f = fopen("data.bin", "wb");
  8.     for (i = 0; i < 7; ++i)
  9.         fwrite((void*)&arr[i], sizeof(float), 1, f);
  10.     fclose(f);
  11.  
  12.     f = fopen("data.bin", "rb");
  13.     fseek(f, 5 * sizeof(float), SEEK_SET);
  14.     fread(&num, sizeof(float), 1, f);
  15.     printf("%f\n", num);
  16.     fclose(f);

Объяснение кода листинга программы

  1. Объявляется массив из 7 элементов типа float с начальными значениями {1.03, 2.07, 4.015, 2.38, 5.78, 9.34, 8.41}.
  2. Создается переменная типа int для цикла и переменная типа float для хранения числа, которое будет прочитано из файла.
  3. Открывается файл data.bin в режиме записи (wb).
  4. В цикле записываются все элементы массива в файл с помощью функции fwrite.
  5. Файл закрывается с помощью функции fclose.
  6. Открывается файл data.bin в режиме чтения (rb).
  7. С помощью функции fseek устанавливается позиция чтения пятого по счету элемента массива (5 * sizeof(float)).
  8. С помощью функции fread считывается один элемент массива в переменную типа float.
  9. С помощью функции printf выводится на экран значение считанного числа.
  10. Файл закрывается с помощью функции fclose.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы