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

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

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

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

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

textual
Листинг программы
    float arr[7] = { 1.03, 2.07, 4.015, 2.38, 5.78, 9.34, 8.41 };
    //float arr[7] = { 1, 2, 3, 4, 5, 6, 7 };
 
    int i;
    float num;
    FILE* f;
    f = fopen("data.bin", "wb");
    for (i = 0; i < 7; ++i)
        fwrite((void*)&arr[i], sizeof(float), 1, f);
    fclose(f);
 
    f = fopen("data.bin", "rb");
    fseek(f, 5 * sizeof(float), SEEK_SET);
    fread(&num, sizeof(float), 1, f);
    printf("%f\n", num);
    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
Похожие ответы