Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Функции в с++ http://www.cyberforum.ru/cpp-beginners/thread251513.html
Задание: Мой код: #include <iostream> #include <math.h> using namespace std; int Max(int x,int y) { if (x>y) return(x);
C++ Как разобраться с принадлежностью фигурных скобок? Учусь писать программы на Microsoft Visual Studio 2008 Express edition. Иногда бывает трудно понять, к какой открывающей/закрывающей фигурной скобке принадлежит та или иная фигурная скобка. Думаю, любой начинающий программист сталкивался с этой проблемой. Ведь порою трудно бывает разобраться с массой фигурных скобок, особенно если они разположены в конце кода! Есть ли в MVS 2008 Ee фича, при... http://www.cyberforum.ru/cpp-beginners/thread251493.html
C++ Удалить нулевой элемент
Дан массив с большим количеством нулевых элементов. Заменить в нем кажлую группу из нечетного количества подряд идущих нулей на один нуль, а из четного - на два.
Составление функций C++
Составить блок-схему и разработать программу, которая по заданным вершинам треугольника в прямоугольной декартовой системе координат вычисляет его площадь.
C++ Вектор http://www.cyberforum.ru/cpp-beginners/thread251480.html
Помогите,пожалуйста с решением лабораторной!!! Вектор В сформировать из целых случайных чисел в диапазоне . а) найти произведение элементов в диапазоне и сумму положительных элементов. б) удалить минимальный элемент вектора. в) заменить максимальный элемент вектора среднеарифметическим значением последних 15 элементов. г) поменять местами максимальные элементы из первых 10 и последних...
C++ Распечатать введенное предложение, удалив из него слова, которые состоят менее, чем из трех букв помогите составить программу: Распечатать введенное предложение, удалив с него слова, котоорые состоят менее, чем из трех букв подробнее

Показать сообщение отдельно
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
03.03.2011, 12:56     Создать список с последовательным хранением и записать его в бинарный файл
вообщем по условию задачи надо создать список с последовательным хранением и записать его в файл .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'

Я вывожу считанные данные чтобы проверить верно ли разбивается строка.Вроде верно.И то что считывает прога тоже верно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru