Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767

Создать список с последовательным хранением и записать его в бинарный файл

03.03.2011, 12:56. Показов 1269. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вообщем по условию задачи надо создать список с последовательным хранением и записать его в файл .bin.
Данные берутся из текстового файла(имя которого передается как параметр командной строки или есть файла нет создается и заполняется пользователем) и хранятся в виде
1 seans 12.12.1222 12:56 1 1
Эта запись разбивается по полям структуры.
Вообщем в чем проблема.Считывается из файла одна строка а потом вылетает прога с ошибкой.
(то что в список не записывается а следовательно и в бинарный файл...другая проблема.но не теперешняя)
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct
{
    int nommer;
    char seans[30];
    char date[15];
    char time[15];//d[2]=. d[5]=. d[10]=' ' d[13]=:
    int nober;
    int nomer;
}bilet;
 
void Destroy(bilet *list,int cnt)
{
 if(list) free(list);
 list = NULL; cnt = 0;
}
 
int Add(bilet val,bilet *list,int cnt)//äîáàâëåíèå â êîíåö
{
 bilet *tmp = (bilet*)calloc(cnt+1,sizeof(bilet));
 if(!tmp) return 0;
 if(cnt) memcpy(tmp,list,cnt*sizeof(bilet));
 tmp[cnt] = val;
 cnt++; if(list) free(list); list = tmp;
 return 1;
}
 
int Ins(bilet val, int ind,bilet *list,int cnt)//äîáàâëåíèå â ïîçèöèþ
{
 if(ind < 0) return 0;
 if(ind >= cnt) return Add(val,list,cnt);
 bilet *tmp = (bilet*)calloc(cnt+1,sizeof(bilet));
 if(!tmp) return 0;
 memcpy(tmp,list,ind*sizeof(bilet));
 tmp[ind] = val;
 memcpy(&tmp[ind+1],&list[ind],(cnt-ind)*sizeof(bilet));
 cnt++; free(list); list = tmp;
 return 1;
}
        
int Del(bilet *list,int cnt,int ind)//óäàëåíèå èç ïîçèöèè
{
 if((ind<0)||(ind >= cnt)) return 0;
 if(cnt == 1) {Destroy(list,cnt); return 1;}
 bilet *tmp = (bilet*)calloc(cnt-1,sizeof(bilet));
 if(!tmp) return 0;
 memcpy(tmp,list,ind*sizeof(bilet));
 memcpy(&tmp[ind],&list[ind+1],(cnt-ind-1)*sizeof(bilet));
 cnt--; free(list); list = tmp;
 return 1;
}
 
int poisk(bilet *list,char *temp,int cnt)//ïîèñê íóæíîé ñòðîêè
{
    if (!strcmp(temp,""))
     return 0;
    for(int i=0;i<cnt;i++)
    {
        if (!strcmp(list[i].date,temp))//åñëè ðàâíû
        {
            Del(list,cnt,i);
        }
    }
    return 1;
}
 
void sort(bilet *list,int i,int cnt)
{
    if (cnt<1) return;
    switch(i)
    {
    case 1:
        {
            for(int j=0;j<cnt;j++)
                for(int k=cnt-1;k>j;k--)
                    if (list[k-1].nomer<list[k].nomer)
                    {
                        bilet z=list[k-1];
                        list[k-1]=list[k];
                        list[k]=z;
                    }
        break;
        }
    case 2:
        {
            for(int j=0;j<cnt;j++)
                for(int k=cnt-1;k>j;k--)
                    if (list[k-1].nomer>list[k].nomer)
                    {
                        bilet z=list[k-1];
                        list[k-1]=list[k];
                        list[k]=z;
                    }
        break;
        }
    }
}
 
 
 
int main(/*int argc,char *argv[]*/)
{
    bilet *list=NULL;
    int cnt;
    char s[100];
//  cout<<"Numner <<Seans>> dd.mm.gggg cc:mm number number"<<endl;
//  gets(s);
    FILE *ft;
    
     ft=fopen("original.txt","wt");
     int n;
     cout<<"Kol-vo elementov"<<endl;
     cin>>n;
     for(int i=0;i<n;i++)
     {
         gets(s);
         s[100]='\n';
         s[99]='\0';
         fputs(s,ft);
     }
     fclose(ft);*/
     ft=fopen("original.txt","rt");
    cnt=-1;
    char *str;
    /*int yy;
    cout<<"Vvedite napravlenie sortirovki 1 - ub 2 -vosr"<<endl;
    cin>>yy;*/
    while (!feof(ft))
    {
    //  if (!feof(ft))
    //  {
            cnt++;
            bilet tmp;
            fgets(s,100,ft);
            str=strtok(s," ");//íîìåð
            tmp.nommer=atoi(str);
            str=strtok(NULL," ");//ñåàíñ
            strcpy(tmp.seans,str);
            str=strtok(NULL," ");//äàòà
            strcpy(tmp.date,str);
            str=strtok(NULL," ");//âðåìÿ
            strcpy(tmp.time,str);
            str=strtok(NULL," ");//íîìåð ÷åãî-òî
                tmp.nober=atoi(str);
            str=strtok(NULL," ");//òîæå íîìåð
            tmp.nomer=atoi(str);
            Add(tmp,list,cnt);
         //   sort(list,yy,cnt);
    //  }
            
    }
    fclose(ft);
    cout<<"Ishodnii spisok"<<endl;
    for(int i=0;i<cnt;i++)
    {
        cout<<list[i].nommer<<" "<<list[i].seans<<" "<<list[i].date<<" "<<list[i].time<<" "<<list[i].nober<<" "<<list[i].nomer<<endl;
    }
    char y[15];
    cout<<"VVedire datu xx.yy.zzzz"<<endl;
    gets(y);
    poisk(list,y,cnt);
    cout<<"Udaleno"<<endl;
    cout<<"Sorted"<<endl;
    FILE *fb;
    fb=fopen("result.bin","wb+");
    for(int i=0;i<cnt;i++)
    {
        fwrite(&list[i],sizeof(bilet),1,fb);
    }
    fclose(fb);
   /* bilet x;
    fb=fopen("result.bin","rb");
    while(!feof(fb))
    {
        if (!feof(fb))
        {
            fread(&x,sizeof(bilet),1,fb);
            cout<<x.seans<<" "<<x.date<<" "<<x.time<<" "<<x.nober<<" "<<x.nomer<<endl;
        }
    }
    fclose(fb);*/
}
я пытался сделать запись по строкам т.е.
XXXXX....
XXXX.....
но почему-то записывается в строку.хотя я и записывал в последний элемент строки '\n' и'\0'

Я вывожу считанные данные чтобы проверить верно ли разбивается строка.Вроде верно.И то что считывает прога тоже верно
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.03.2011, 12:56
Ответы с готовыми решениями:

Создать список, записать его в файл и вывести в правильной кодировке
#include&lt;stdio.h&gt; #include&lt;malloc.h&gt; #include&lt;string.h&gt; typedef struct sp { char *info; struct sp *next; }sp; sp...

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

Записать информационную часть списка в бинарный файл, и прочитать его
Подскажите, как записать информационную часть измененного списка в бинарный файл и прочитать его? #include &quot;stdafx.h&quot; ...

4
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
03.03.2011, 13:33
Цитата Сообщение от Artishok Посмотреть сообщение
C++
1
2
s[100]='\n';
s[99]='\0';
по идее, надо наоборот
C++
1
2
s[99]='\n';
s[100]='\0';
и еще откуда взялись эти магические цифры? откуда вы знаете, что прочитанная строка будет состоя именно из 98 символов? допустим, пользователь ввел строку "qerty asdf 123" без кавычек. после того, как Вы выполняете данный код, то после символов 123 до 98 символа будет мусор.
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
03.03.2011, 13:54  [ТС]
я на последние символы размерности строки записываю символы окончания и перехода строки а поскольку размер строки максимальный 100 то я на 100 и записываю

и кстати.как записывать в файл столбцом?

Добавлено через 12 минут
теперь уже и из файла не считает
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
03.03.2011, 14:00
Цитата Сообщение от Artishok Посмотреть сообщение
максимальный 100
не забывайте, что адресация массива начинается с 0, а последний элемент будет с индексом 99, а уж не как не 100.

Добавлено через 4 минуты
Цитата Сообщение от Artishok Посмотреть сообщение
как записывать в файл столбцом?
единственное, что приходит на ум, просто грузишь в память, производишь необходимые манипуляции, перезаписываешь файл полностью.
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
03.03.2011, 20:31  [ТС]
А если в файле все записано то с помощью fgets оно будет считываться по строкам так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.03.2011, 20:31
Помогаю со студенческими работами здесь

Создать бинарный файл f и записать в него целые числа
Создать бинарный файл f и записать в него целые числа. Организовать просмотр бинарного файла и его обработку: Найти все не четные числа и...

Как сохранить список в бинарный файл, и затем прочитать его из файла?
как сохранить список в бинарный файл, и затем прочитать его из файла???

Создать файл F1, записать в него N чисел, а затем создать его копию - файл F2
Вроде есть все условия, но последние числа перезаписывает: #include &lt;iostream&gt; #include &lt;stdio.h&gt; using namespace std; ...

Записать в бинарный файл массив объектов Student (бинарный файловый ввод/вывод)
Здравствуйте. Стоит задача записать в бинарный файл массив объектов student: class student { string firstname,lastname, group; ...

Создать динамический массив. Заполнить его числами от 1 до n и записать его в файл.
создать динамический массив. Заполнить его числами от 1 до n и записать его в файл.


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка 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