Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
Генрисон
4 / 3 / 1
Регистрация: 30.10.2012
Сообщений: 296
#1

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

30.12.2014, 22:50. Просмотров 565. Ответов 2
Метки нет (Все метки)

Вот имеется файл,в котором содержатся 7 вещественных чисел

1.03 2.07 4.015 2.38 5.78 9.34 8.41

Нужно вывести на экран пятое по счету число. Если бинарный файл,это файл прямого доступа,то,по идее,используя функцию fseek() я могу сместиться на нужное число значений и получить пятое число

То есть в данном случае код будет выглядеть вот так:
C
1
2
3
4
5
6
7
8
9
10
11
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
То код будет вот таким
C
1
2
3
4
5
6
7
8
9
10
11
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;
}
Или таким
C
1
2
3
4
5
6
7
8
9
10
11
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,почему он именно такой и от чего он зависит ?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2014, 22:50
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Работа с бинарными файлами, параметры функции fseek: вывести на экран пятое по счету число (C (СИ)):

Работа с бинарными файлами. Вывод на экран - C (СИ)
В бинарном файле у меня 3 записи структуры: a a 5 a a 4 a a 6 Однако сортирует и выводит на экран 9 записей: a a 4 a a 4 a a...

Работа с бинарными файлами, конец бинарного файла - C (СИ)
Доброго времени суток, уважаемые форумчане. Хотел разобраться с работой с бинарными файлами в Си. Столкнулся с проблемой: данные в файл я...

Вывести на экран третье, пятое и шестое число - C++
Помогите пожалуйста! Вывести на экран третье, пятое и шестое число, кратное 3 и 7 в диапазоне от N1 до N2.

Работа с бинарными файлами (программка дважды записывает последнее число) - C++
Добрый день, помогите пожалуйста с такой ситуацией: написал програмку для заполнения бинарного файла рандомными числами (их количество...

работа с fseek и файлами - C++
задача: совершить "прыжок" по строкам файла test.txt (строк, предположим, 20) и считав строку (предположим седьмую) вывести её на экран. ...

Работа с файлами (fseek) - C++
В чем проблема и как ее устранить ? #include <iostream> #include <conio.h> #include <string.h> #include <stdio.h> ...

2
Velesthau
524 / 426 / 129
Регистрация: 25.11.2014
Сообщений: 1,662
31.12.2014, 00:13 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Генрисон Посмотреть сообщение
1.03 2.07 4.015 2.38 5.78 9.34 8.41
Бинарный файл с числами так не выглядит. Создай правильный бинарный файл.

Добавлено через 2 минуты
Цитата Сообщение от Генрисон Посмотреть сообщение
fscanf(f,"%lf",&buf)
И это форматное чтение, которое читает строку определенного формата, а не бинарные данные.

Добавлено через 7 минут
Цитата Сообщение от Генрисон Посмотреть сообщение
Может кто-нибудь объяснить,почему нужно именно так?
А так не нужно. У тебя файл текстовый.
Цитата Сообщение от Генрисон Посмотреть сообщение
То есть мне не совсем понятен второй параметр в функции fseek,почему он именно такой и от чего он зависит ?
Смещение в бинарном файле у тебя будет одно и то же (на одной машине с одним компилятором).

Добавлено через 2 минуты
Вот грубый пример записи бинарного файла и чтения. Делал с плюсовым компилятором, поэтому на чистом С чуть поправишь, если что.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    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);
можешь arr делать любым, все равно смещение 5 * sizeof(float) останется тем же и будет брать 6-е число (5 по индексу с 0-го)
2
Генрисон
4 / 3 / 1
Регистрация: 30.10.2012
Сообщений: 296
08.01.2015, 20:04  [ТС] #3
Velesthau, извините,что так поздно проснулся,но у меня появился вопрос. То есть выходит,что я не могу создать текстовый файл,заполнить его,как обычный текстовый и потом расширение поменять на bin,чтобы потом перемещаться по нему с помощью fseek ? То есть я должен делать,как вы показали,с предварительным заполнением по правилам работы с бинарным файлом?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2015, 20:04
Привет! Вот еще темы с ответами:

Работа с бинарными файлами - C++
Помогите решить проблему. Задача: создать файл записать в него 10 структур и закрыть, затем добавить еще 3, а после вывести их все на...

Работа с Бинарными файлами - C++
Помогите сделать сохранение не могу разобраться :( Почему в этом коде #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;windows.h&gt; ...

Работа с бинарными файлами - C++
Задача такова : нужно записать созданные объекты класса в бинарный фал а затем прочитать их же из файла и вывести на экран. Код написал,...

Работа с бинарными файлами - PHP
Вот проблемный код: if ($fd = fopen($f, &quot;rb&quot;)) { $temp = tmpfile(); while ( !feof($fd) ) { $b = fread($fd, 1); $x = $b; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru