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

Запись и чтение вектора из файла

02.08.2012, 13:48. Показов 3048. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите понять ошибку. Создаю группу, записываю ее в файл (первым в файл записывается непонятный символ). Первый запуск нормальный, файл создается, но при повторном группа дописывается, а вот уже на функции void ReadGroup(char *path, group&g); вылетает ошибка.

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
#include <iostream>
#include <vector>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <conio.h>
using namespace std;
 
struct Student
{
   char name [30], surname [30], year [10];
};
 
ostream& operator<<(ostream& os, Student &s)
{
    os<< "\nName-" << s.name << " Surname-" << s.surname << " Year-" << s.year << '\n';
    return os;
}
istream& operator >> (istream& is, Student &s)
{
    char nam [30], surnam [30], yer [10];
    cout << "\nName-";
    is >> nam; 
    cout << "Surame-";
    is >> surnam;
    cout << "Year-";
    is >> yer;
    cout << '\n';
    strcpy_s(s.name,nam);
    strcpy_s(s.surname,surnam);
    strcpy_s(s.year, yer);
    return is;
}
 
class group
{
    vector<Student> m;
    char names[30];
public:
    group();
    ~group() {/*del();*/}
    // Конструктор копирования
    group(Student& L)   { group  temp; temp.add(L);}
    void add(Student s) {m.push_back(s);}
    void del() { m.pop_back ();}
    void del(int pos) { m.erase(m.begin()+pos); }
    void Set (char *nam) { strcpy_s (names, nam);}
    void Sort (group&);
    void Serch(group& L, char *s2);
    void print ()
            {
                for (unsigned int i=0; i < m.size(); i++)
                    {
                        cout << "\nName " << m[i].name << "\nSurname " << m[i].surname << "\nYear "<< m[i].year << '\n'; 
                    }
            }
    int size(){return m.size();}
    Student& operator[](int pos) {return m[pos];}
        
        void WriteGroup(char *path, group&g);
        void ReadGroup(char *path, group&g);
    
};
 
void WriteGroup(char *path, group&g)
    {
        FILE *f=fopen(path, "a+"); //аналог fscanf(f, "%s", str);
        if (!f){puts("Error!"); return;}
        int N=g.size();
            fwrite(&g, sizeof(N), 1,f); 
            
        for (int i=0; i<N; i++)
            {
                fwrite (&g[i].name, sizeof(N), 1,f); fprintf(f, "\t");
                fwrite (&g[i].surname, sizeof(N), 1,f); fprintf(f, "\t");
                fwrite (&g[i].year, sizeof(N), 1,f); fprintf(f, "\n");
            }
        fclose(f);
    }
void ReadGroup(char *path, group&g)
    {
        FILE *f=fopen(path, "r+"); 
        if (!f){puts("Error!"); return;}
        int N=g.size();
        
        fread(&g, sizeof(N), 1,f); //&m - адрес объектаб sizeof(N)- кол-во байтб 1 - кол-вой объектов, f-файл
        printf("Name\tSurname\tYear\n");
        for (int i=0; i<N; i++)
            {
                fread (&g[i], sizeof(N)/4, 1,f); 
                fread (&g[i].name, sizeof(N)/4, 1,f); 
                fread (&g[i].surname, sizeof(N)/4, 1,f); 
                fread (&g[i].year, sizeof(N)/4, 1,f); 
            }
        fclose(f);
 
 
    }
void main ()
{
    Student  first, first1, first2, first3;
    
    strcpy_s(first.name,"Ivanovich");
    strcpy_s(first.surname,"Ivanov");
    strcpy_s(first.year,"22");
    
    strcpy_s(first1.name,"Petr");
    strcpy_s(first1.surname,"Petrov");
    strcpy_s(first1.year,"23");
    
    strcpy_s(first2.name,"Alex");
    strcpy_s(first2.surname,"Alexeev");
    strcpy_s(first2.year,"20");
 
    group gr1;
    gr1.add(first);
    gr1.add(first1);
    gr1.add(first2);
    
    cout << gr1 << '\n';
    
    WriteGroup("E:\\Ra.txt",gr1);
    ReadGroup( "E:\\Ra.txt",gr1);
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.08.2012, 13:48
Ответы с готовыми решениями:

Запись и чтение вектора из файла
Здравствуйте! Вот небольшая прога которая пишет в вектор структуру... при повторном запуске она читает с файла в вектор и по идее можно...

Запись/чтение вектора в/из файла.Структуры
Доброе время суток.Проблема заключается в следующем: в файл идет запись вектора (запись вроде-бы успешна,насколько я могу судить).После...

Запись вектора uin8_t в бинарный файл и обратное чтение из файла
Здравствуйте. Есть std::vector&lt;uint8_t&gt;. Нужно записать все элементы в бинарный файл, а затем считать обратно из файла в...

20
 Аватар для Флибустьер
0 / 0 / 0
Регистрация: 24.01.2011
Сообщений: 12
05.08.2012, 14:23  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
2
3
stream <<"\t"<< c.day <<"\t"<< c.month <<"\t"<< c.year
 <<"\t"<< c.areacode<<"\t"<< c.callNumber
 <<"\t"<< c.min <<"\t"<< c.sec <<"\t"<< c.payFoCall<<endl;
Avazart, я понял, видно дело было в отсутствии пробелов, без них машина не смогла считать, теперь все заработало. Еще раз Вам спасибо, это хороший опыт для меня
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.08.2012, 14:23

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

Запись и чтение вектора структур в бинарный файл(2)
Есть заполненный вектор структур. Структура вида: struct struc { string a; int x; map&lt;int, int&gt;m; }; ...

Запись и чтение вектора структур в бинарный файл
Есть заполненный вектор структур. Структура вида: struct struc { string a; int x; map&lt;int, int&gt;m; }; Написал две...

Чтение вектора структур из файла
struct TRANSACTIONS { unsigned long long sender; unsigned long long receiver; unsigned long long amount; } ... ...

Вектора и чтение из файла и обратно (File IO)
Ребят! Помогите как сможете! Я никак не могу связать перечисления между собой( И еще никак не могу сделать так, чтобы каждый раз, когда...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru