Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
nstwf
91 / 80 / 57
Регистрация: 19.02.2016
Сообщений: 336
Завершенные тесты: 1
1

Добавление структур в файл

13.06.2016, 14:37. Просмотров 355. Ответов 6
Метки нет (Все метки)

Здравствуйте, прошу помощи с проблемой:
Проблема состоит в том, что при добавлении элементов структуры(если их >2), то некоторые элементы произвольно начинают копироваться, во вложении я ввел только 3 структуры - (имя1 177 | имя2 188 | имя3 199).

Проблема в строке №25, а именно "ios::app".
Дело в том, что если его нет, то структуру нужно вводить при каждом запуске программы новую - все работает прекрасно тогда, но мне необходимо постоянно добавлять в файл новые данные(делаю анкету)
Кто подскажет в чем проблема?

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
#include <iostream>
#include <fstream>
#include <Windows.h>
#include <stdio.h>
#include <conio.h>
#include <string>
 
using namespace std;
 
struct product
{
    char name[30];      //имя
    int cost;       //рост
};
 
void SetData(product* Obj, const int n)
{
    cout << "Имя: ";
    scanf_s("%s", &Obj[n - 1].name, 30);
    cout << "Рост: ";
    cin >> Obj[n - 1].cost;
    cin.get();
    cout << endl;
 
    ofstream ostruct("out.txt", ios::binary|ios::app);
    ostruct.write(reinterpret_cast<char *>(Obj), sizeof(product) * n);
    ostruct.close();
}
 
product* AddStruct(product* Obj, const int n)
{
    if (n == 0)
    {
        return new product[1];
    }
    else
    {
        product* tempObj = new product[n + 1];
        for (int i = 0; i < n; i++)
        {
            tempObj[i] = Obj[i]; // копируем во временный объект
        }
        delete[] Obj;
        return tempObj;
    }
}
 
void PrintData(product* Obj, const int n, string filename)
{
    ifstream showdata(filename, ios::binary);
    if (!showdata)
    {
        cout << "Ошибка при открытии файла.\n";
    }
    else
    {
        showdata.seekg(0, ios::end);// тут ищем размер структуры
        streamoff n = showdata.tellg() / sizeof(product);
        showdata.seekg(0, ios::beg);
        product *Obj = new product[n];
        showdata.read(reinterpret_cast<char*>(Obj), sizeof(product) * n);
        for (int i = 0; i < n; i++)
        {
            cout << i + 1 << "\t"
                << Obj[i].name << "\t\t"
                << Obj[i].cost << "\t" << endl;
        }
        delete[] Obj;
    }
    showdata.close();
}
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    string fname = "out.txt";
    product* allproducts = 0;
    int allprod = 0, x;
    _getch();
    mar:
    cout 
        << "1. Ввести данные в структуру." << endl
        << "2. Отобразить введенные данные." << endl;
 
    int p;
    p = _getch();
    switch (p)
    {
    case '1':
        system("cls");
        do
        {
            allproducts = AddStruct(allproducts, allprod);
            ++allprod;
            SetData(allproducts, allprod);
            cout << "Продолжить ввод данных? (1-да|0-нет) ";
            x = _getch();
            cout << endl;
        } while (x == '1');
        system("cls");
        break;
    case '2':
        system("cls");
            system("cls");
            cout << "Содержимое файла <" << fname << ">:" << endl;
            PrintData(allproducts, allprod, fname);
            _getch();
        break;
    }
    _getch();
    goto mar;
}
Благодарю заранее!
0
Миниатюры
Добавление структур в файл  
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2016, 14:37
Ответы с готовыми решениями:

Можно ли присвоить одному массиву структур значение другого массива структур и записать его в файл
Можно ли присвоить одному массиву структур значение другого массива структур и записать его в файл?

Добавление и удаление строк в массиве структур
Как добавлять и удалять целые строки в структуре? (можно командой в консоли по 1 строке)

Динамический массив структур (добавление новой структуры)
Друзья, создаю программу &quot;Библиотека&quot; и запоролся на добавлении структуры к массиву (книги в...

Файл: Записать список структур в файл
мне надо Массив записать в ФАЙЛ!!!!!! по заданию есть прога, её надо подредактировать, но это не...

Создать массив структур, который можно редактировать: поиск по заданному полю, удаление и добавление элементов
Создать структуру и именем sklad, которая содержит следующие поля: NAME- Название товара TYPE-...

6
Renji
2513 / 1719 / 515
Регистрация: 05.06.2014
Сообщений: 4,981
14.06.2016, 06:31 2
Цитата Сообщение от fleqfvkb Посмотреть сообщение
некоторые элементы произвольно начинают копироваться
Потому что 26 строчка с ее * n вываливает в файл все существующие объекты. В дополнение к тому, что уже есть в файле.
Алсо, вместо goto в начало алгоритма, нормальные белые люди используют while(true){код алгоритма}. И вообще, есть не лишенное оснований мнение что квалификация программиста обратно пропорциональна числу goto в его коде.
0
nstwf
91 / 80 / 57
Регистрация: 19.02.2016
Сообщений: 336
Завершенные тесты: 1
14.06.2016, 10:41  [ТС] 3
Цитата Сообщение от Renji Посмотреть сообщение
Потому что 26 строчка с ее * n вываливает в файл все существующие объекты.
Renji, можно исправленный кусок кода, ибо я не совсем понимаю, что это значит?
0
Renji
2513 / 1719 / 515
Регистрация: 05.06.2014
Сообщений: 4,981
14.06.2016, 17:45 4
Цитата Сообщение от fleqfvkb Посмотреть сообщение
Renji, можно исправленный кусок кода, ибо я не совсем понимаю, что это значит?
"Я скопировал готовый код, в котором не понимаю ни единой строчки. Не могли бы вы дописать программу за меня?".
Нет, можно только дать ссылку на мануал.
0
nstwf
91 / 80 / 57
Регистрация: 19.02.2016
Сообщений: 336
Завершенные тесты: 1
14.06.2016, 18:00  [ТС] 5
Цитата Сообщение от Renji Посмотреть сообщение
"Я скопировал готовый код, в котором не понимаю ни единой строчки. Не могли бы вы дописать программу за меня?".
Нет, можно только дать ссылку на мануал.
Renji, Я не прошу всю программу целиком, она у меня есть, проблема только с дозаписью в файл, и как я понял - проблема только в одной строке.
А программа написано мною, но под то, чтобы вводить структуры при каждом запуске программы, прошу помощи с некоторой модификацией для нее.
0
Renji
2513 / 1719 / 515
Регистрация: 05.06.2014
Сообщений: 4,981
14.06.2016, 18:05 6
Цитата Сообщение от fleqfvkb Посмотреть сообщение
Renji, Я не прошу всю программу целиком, она у меня есть, проблема только с дозаписью в файл, и как я понял - проблема только в одной строке.
Не в одной. Вам надо передавать в SetData указатель на новые данные и число новых записей. А значит, надо переделывать вызов SetData и как-то отделять новые данные от старых. А это уже переписыванием одной строчки не ограничится.
1
nstwf
91 / 80 / 57
Регистрация: 19.02.2016
Сообщений: 336
Завершенные тесты: 1
14.06.2016, 18:11  [ТС] 7
Цитата Сообщение от Renji Посмотреть сообщение
Не в одной. Вам надо передавать в SetData указатель на новые данные и число новых записей. А значит, надо переделывать вызов SetData и как-то отделять новые данные от старых. А это уже переписыванием одной строчки не ограничится.
Спасибо и на этом, кода просить не буду для примера.
0
14.06.2016, 18:11
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2016, 18:11

Файл структур
Все проходит нормально, все считывает, но почему-то не выводит значения даже при удовлетворяющих...

Запись структур в файл
У меня есть файл и масив структур. Надо реализовать запись и чтения файла. Можна ли сделать так:...

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


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

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

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