Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для Валерьянка
0 / 0 / 0
Регистрация: 03.02.2011
Сообщений: 3

Считывание из бинарного файла в массив_не работает!

04.02.2011, 11:13. Показов 2338. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
у меня есть большая программа, где я работаю с бинарными файлами, содержащими список студентов...так вот, я создала бин файл со студентами-отличниками, а следующая функция должна выполнять сортировку этого файла по группам, а каждую группу по фамилиям в алфавитном порядке( используя стандартную функцию сортировки qsort). вся соль в считывании в массив структур из файла - не хочет =((( до этого всё правильно выполнялось....мот тут ошибка лежит на поверхности и я туплю..гляньте, пожалуйста... если что скину остальные данные

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
int cmp(const void* a, const void* b)
{
    TopS *pa=(TopS*)a;
    TopS *pb=(TopS*)b;
    if (pa->number==pb->number)
        return(strcmp(pa->surname, pb->surname));
    else
        return(pa->number-pb->number);
}
void Sort_top()
{
    ifstream  top1("top_students.txt", ios::binary);
    if(!top1)
    {
        cout<<"file is not open"<<endl;
        return;
    }
    long n, filesize;
    top1.seekg( 0, ios::end);
    filesize=top1.tellg();
    n=filesize/sizeof(TopS);
    TopS* S=new TopS [n];       
    for(int i=0; i<n; ++i)
    {
        top1.read((char*)&(S[i]), sizeof(S[0]));
        cout<<(S[i]).surname<<"\t"<<(S[i]).group<<"\t"<<(S[i]).number<<endl;
    }
    top1.close();
    qsort(S, n, sizeof(TopS), cmp);
    ofstream  top2("top_students.txt", ios::binary);
    cout<<"файл после сортировки"<<endl;
    for(int i=0; i<n; ++i)
    {
        top2.write((char*)&S[i], sizeof(TopS));
        cout<<(S[i]).surname<<"\t"<<(S[i]).group<<"\t"<<(S[i]).number<<endl;
    }
    delete[] S;
    top2.close();
 
}
вот структура:
C++
1
2
3
4
5
6
struct TopS
{
    char surname[20];
    int group;
    int number;
};
заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.02.2011, 11:13
Ответы с готовыми решениями:

Считывание бинарного файла
Здравствуйте, Помогите пожалуйста найти проблему, мне нужно вначале записать текст в бинарный файл а затем считать его, записывает...

Считывание из бинарного файла
СЧИТАТЬ ИЗ БИНАРНОГО ФАЙЛА ВСЕ ВЕЩЕСТВЕННЫЕ ЧИСЛА В МАССИВ И ВЫВЕСТИ ЕГО НА ЭКРАН. #include &lt;iostream&gt; #include &lt;fstream&gt; ...

Считывание бинарного файла
Здравствуйте! Изначально нужно было прочитать почисленно текстовый файл и забить его в массив. Но т.к. это не получилось, решил прочитать...

6
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
04.02.2011, 11:22
sizeof(S[0]) в 25 строке выдаст всего 4 байта - это потому что компилятрор будет выдавать размер указателя на Ых0ъа не структуры S[0], я знаю что эти слова могут показаться непонятными но для динамических массивов это именно так, замени на sizeof(TopS), думаю поможет
1
 Аватар для Валерьянка
0 / 0 / 0
Регистрация: 03.02.2011
Сообщений: 3
04.02.2011, 12:34  [ТС]
не помогло =(
всё равно выдаёт только вязь, вместо нужной информации.....тупо, но у меня ещё пошаговое выполнение с F10 не то, что надо делает, а кнопками на панели не удобно.....но когда тестировала в универе, ошибки начинались именно в этой строке, там в массив записывалось
"-842150451 -842150451 ННННННННННННННННННННННННННННММММММММЂbQX QШЂ6" - это и сейчас на печать в консоль выдаёт


ещё пробывала сначала просто в переменную типа структуры записать, а потом в массив - тоже непродуктивно
0
 Аватар для Vint456
1 / 1 / 1
Регистрация: 08.09.2009
Сообщений: 14
04.02.2011, 14:00
ну на скоко я помню, массивы считываются не по элементно, так как битовый файл, то в 2 битах содержится определенный набор информации. У тебя структура из 3 данных значит в 2 битах один элемент массива из 3 данных. и целиком просто весь файл считываешь, а он запишет как нада: короче ниже код:
допустим

пример
C++
1
2
int buff[100]
top1.read((char*)buff, sizeof(buff));
ну и соответственно:
C++
1
top1.read((char*)S, sizeof(S));
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
04.02.2011, 14:03
Я как то упустил когда позиционируешь курсор вконец файла
C++
1
top1.seekg( 0, ios::end);
не забівай его вернуть вначало
C++
1
top1.seekg( 0, ios::beg);
иначе чтение идёт не сначала файла!!!
Ну а вобще пришли свой файл с которого чтение ведёшь, попробую разобраться если не поможет
1
 Аватар для Vint456
1 / 1 / 1
Регистрация: 08.09.2009
Сообщений: 14
04.02.2011, 14:06
Да точно указатель еще в начало, я и не заметил))
1
 Аватар для Валерьянка
0 / 0 / 0
Регистрация: 03.02.2011
Сообщений: 3
05.02.2011, 19:11  [ТС]
=) чтение заработало)) как раз шла с универа и про каретку вспомнила)))
ворона я) осталось сортировку исправить, она кажись некорректно работает

Добавлено через 5 часов 28 минут
а можете ещё посмотреть мою сортировку здесь...она не работает...не могу понять причину


Добавлено через 22 часа 42 минуты
уже не надо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.02.2011, 19:11
Помогаю со студенческими работами здесь

Считывание данных из бинарного файла
Доброго времени суток. Моя проблема уже была озвучена в теме. Вот листинг функции которая должна считывать данные из бинарного...

Считывание структуры из бинарного файла
Привет всем, при считывании структуры одной строкой кода и последующим выводом ее на экран выводятся непонятные символы. подскажите, что...

Запись и считывание из бинарного файла
Допустим я реализовываю АТД - контейнер. Там будет функция обновления (Все данные скопировать в файл на жестком дискке, а потом обратно)....

Считывание из бинарного файла и занисение в список
Здравствуйте, уважаемые форумчане. Столкнулся с проблемой считывания из бинарного файла. Только вот не с самим считыванием, а занесением...

Считывание строки из бинарного файла в string
Привет всем!! Помогите новичку понять почему происходит ошибка при считывании строки из файла. void LoadFile() { string j; ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru